Member 14800672 Ответов: 1

Как зациклить полученные результаты из табличной переменной


У меня есть это
declare @Identity int
set @Identity = 100

declare @table1 as table (Id int)
insert into @table1 exec  [usp_GetIds] @Identity,2

declare @table2 as table (Id int)
insert into @table exec  [usp_GetIds] @Identity,1


Теперь я хочу сделать логику, основанную на каждой заполненной записи @таблица2 Итак , мне нужно сделать петлю

Что я уже пробовал:

Поэтому после вставки я хочу сделать следующее
допустим, Таблица 2 извлекла это
Id  Name
--  ----
1   name1
2   name2
3   name3


Я хочу прокрутить каждую полученную запись и сделать это
while @table2 is not null  -- it seems i can't say while @table2
(
select count(Id)from @table1 where @table1.Id=@table2.Id 
--it seems i can't say @table1.field
exec usp_doSth(@table2.Id)
)

CHill60

Не петляй!
SQL устанавливается на основе
Взгляните на мою статью Циклы обработки в SQL Server[^] - в конце он расскажет вам, как делать циклы в SQL Server - остальная часть статьи дает примеры того, почему вам обычно не нужен цикл и как это сделать

Member 14800672

как я могу использовать while с созданной мной табличной переменной?

Jörgen Andersson

Вы не можете, потому что это переменная таблицы.
Это относится к таблице, а не к значению или даже к строке со значениями.
Теперь я предлагаю вам прочитать статью, на которую вы были связаны. Это хорошо

1 Ответов

Рейтинг:
1

Richard Deeming

Как уже упоминалось в комментариях, вы всегда должны стараться избегать циклов в SQL-коде. Но в данном случае что-то вроде этого должно сработать:

WHILE Exists(SELECT 1 FROM @table2)
BEGIN
    DECLARE @Id int;
    SELECT TOP 1 @Id = Id FROM @table2 ORDER BY Id;
    EXEC ups_doSth @Id;
    DELETE FROM @table2 WHERE Id = @Id;
END;