0

查詢我有一個查詢,看起來像這樣:需要幫助的改寫是使用遊標

DECLARE Match_Cursor CURSOR 
FOR 
    SELECT ID,UserKey,TypeCode 
    FROM [DB1].Table1 as t1 
OPEN Match_Cursor 

FETCH NEXT FROM Match_cursor INTO @ID,@UserKey,@TypeCode; 
    WHILE (@@FETCH_STATUS <> -1) 
    BEGIN 
     INSERT INTO #TempTable 
      SELECT t2.Name, t2.Address, t2.Country, @UserKey, @TypeCode 
      FROM [DB1].[DBO].udf_TableFunction(@ID) as t2 
      where @typeCode = 142 AND t2.Country = 'US' 
FETCH NEXT FROM Match_cursor INTO @ID,@UserKey,@TypeCode; 
    END 

SELECT * FROM #TempTable 

有沒有人有這個重寫使用聯接建議?假設t1.IDt2.ID之間有外鍵關係。

+0

是什麼udf_TableFunction返回?問題是它返回一行。它可以適應返回所有行(如果ID爲NULL),在這種情況下,你可以加入它... – Sparky 2010-01-30 00:37:41

+0

它返回一個行集合。如果傳入null,則不能更改爲返回所有行,但將永遠不會傳遞null。 – 2010-01-30 00:42:45

+2

需要查看'udf_TableFunction'的內容 – 2010-01-30 01:34:15

回答

0

使用cross applyTable1.ID傳遞給udf_TableFunction

這是一個關於如何去做的僞代碼。 (我沒有進入SSMS現在所以無法測試它)

insert #TempTable(...) 
select ... 
from table1 t1 cross apply [DBO].udf_TableFunction(t1.ID) t2 
where ... 
+0

最終將表函數分解爲原始查詢並使用交叉應用。 – 2010-02-02 20:00:50