2010-08-01 2 views
0

Как я могу написать этот код в T-SQL?tsql для цикла в списке

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]) 
} 

Возможно ли это?

ответ

6

Sql Server 2008 позволяет вставлять несколько записи в одном операторе INSERT:

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

Это именно то, что я ищу. – stacker

1

У вас есть два варианта:

1) Просто используйте таблицу памяти (и без петли), которая позволит достичь Такой же результат:

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) Используйте таблицу памяти и построить эквивалентный цикл

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 

Первый вариант достигнет тех же результатов, но это не цикл (это то, что вы просили).

Смежные вопросы