Это похоже на странный запрос - у вас всегда будет фиксированный набор переменных? Что если число изменится с 20 на 21 и т. Д., Вам постоянно придется объявлять новые переменные?
Возможно ли вместо извлечения значений в отдельные переменные возвращать их каждый в виде отдельных строк и просто проходить по ним в курсоре?
Если нет, и вы должны использовать отдельные переменные, как описано, вот одно из решений:
declare @V1 nvarchar(100)
set @V1 = 'hi'
declare @V2 nvarchar(100)
set @V2 = 'bye'
declare @V3 nvarchar(100)
set @V3 = 'test3'
declare @V4 nvarchar(100)
set @V4 = 'test4'
declare @V5 nvarchar(100)
set @V5 = 'end'
declare aCursor cursor for
select @V1
union select @V2 union select @V3
union select @V4 union select @V5
open aCursor
declare @V nvarchar(100)
fetch next from aCursor into @V
while @@FETCH_STATUS = 0
begin
exec TestParam @V
fetch next from aCursor into @V
end
close aCursor
deallocate aCursor
Мне не очень нравится это решение, оно кажется грязным и не масштабируемым. Кроме того, в качестве дополнительного примечания - то, как вы сформулировали свой вопрос, похоже, спрашивает, есть ли массивы в T-SQL. По умолчанию их нет, хотя быстрый поиск в Google может указать вам обходные пути для этого, если они вам абсолютно необходимы.