2010-08-01 7 views
0

Comment écrire ce code dans T-SQL?tsql pour la boucle sur une liste

var categories = new []{ "cat1", "another category", "one more" }; 
for (var i = 0; i<categories.count; i++) 
{ 
    insert into Categories (id, name) 
    values (i, categories[i]) 
} 

Est-ce possible?

Répondre

6

Sql Server 2008 permet d'insérer enregistrements multiples dans une seule instruction INSERT:

INSERT INTO Categories (id, name) 
VALUES (0, 'cat1'), 
    (1, 'another category'), 
    (2, 'one more') 
+0

C'est exactement ce que je cherche. – stacker

1

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é).

Questions connexes