Цикл для цикла в списке - PullRequest
       1

Цикл для цикла в списке

0 голосов
/ 01 августа 2010

Как мне написать этот код на T-SQL?

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

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

Ответы [ 2 ]

6 голосов
/ 01 августа 2010

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

INSERT INTO Categories (id, name)
VALUES (0, 'cat1'),
    (1, 'another category'),
    (2, 'one more')
1 голос
/ 01 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...