Нужна помощь в переписывании запроса, который использует курсор - PullRequest
0 голосов
/ 30 января 2010

У меня есть запрос, который выглядит так:

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.ID и t2.ID.

есть связь с внешним ключом

1 Ответ

0 голосов
/ 31 января 2010

Используйте cross apply для передачи Table1.ID в udf_TableFunction.

Вот псевдокод того, как вы можете это сделать. (У меня сейчас нет доступа к SSMS, поэтому я не смог его протестировать)

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