2012-08-23 30 views
0

我對MSSQL相當陌生,從來沒有使用過內存表,我不是100%確定這是否是我所需要的。mssql/php - 循環訪問resultset並有效執行新的查詢 - 內存表?

我有一個查詢結果集(不能修改),我循環顯示每行數據。對於結果集的一個字段,我需要執行查詢以獲取該字段的相關顯示數據。問題是我可能不得不在循環內調用這個查詢1000次,這取決於結果集中有多少行。

任何人都可以建議如何有效地做到這一點?我聽說過In Memory表格,想知道這是我需要的嗎?如果是,我從哪裏開始?或者我只是存儲在一個數組或其他東西?

任何意見大加讚賞。

回答

1
Declare @Test_Memory_Table Table 
(
/* Fields needed for lookup; use same datatypes as schema */ 
IndexOrPkFieldName Numeric(19,0), 
Field1 varchar(255), 
Field2 date 
) 

Insert into @Test_Memory_Table Select t2.Field1 as field1, t1.field2 as Field2, CONVERT(char(10),t3.Field3, 101) as Field3 
       From Table1 t1 
       INNER JOIN Table2 t2 on t1.pkId = t2.pkId and isnull(t2.IS_ACTIVE,0) = 1 and ISNULL(t2.TYPE, 0) > 0 
       INNER JOIN Table3 t3 on t2.pkId = t3.pkId 

select * from @Test_Memory_Table 

只是測試SSMS中的查詢,並期待在計劃中看到它需要多長時間來恢復記憶表查詢與直接查詢表。請記住,由於ssms中默認的提示(例如arithabort),ssms可能比生產快,但在通過.net客戶端查詢時可能不會這樣設置。如果你的桌子很小,我會認爲這個差距很小。

+0

謝謝你的回答,但是,我對此有點困惑。我是否用我自己的替換您的選擇查詢? – LeeTee

+0

我認爲底線是,我不明白在哪裏使用表變量/臨時表,或者如何比我已經做的更好,並且直接在結果集內調用查詢。我試圖找到情景,但無法找到任何問題,因此我不確定這是我應該使用的東西,如果有的話,我該如何實現? – LeeTee