Vous avez deux options:
1) Il suffit d'utiliser une table de mémoire (et pas de boucle), qui réalisera la même résultat:
declare @values table (idx int identity(0, 1), value varchar(50))
insert into @values (value) values('cat1')
insert into @values (value) values('cat2')
insert into @values (value) values('cat3')
insert into Categories (id, name) select idx, value from @values
2) utiliser une table de mémoire et construire une boucle équivalente
declare @values table (idx int identity(0, 1), value varchar(50))
insert into @values (value) values('cat1')
insert into @values (value) values('cat2')
insert into @values (value) values('cat3')
declare @i int
declare @cnt int
select @i = min(idx), @cnt = max(idx) + 1 from @values
while(@i < @cnt)
begin
insert into Categories (id, name)
select @i, value from @values where idx = @i
select @i = @i + 1
end
La première option obtiendra les mêmes résultats, mais ce n'est pas une boucle (ce que vous avez demandé).
C'est exactement ce que je cherche. – stacker