tsql for循环列表

时间:2010-08-01 18:08:41

标签: tsql sql-server-2008 for-loop

如何在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 个答案:

答案 0 :(得分:6)

Sql Server 2008允许在单个INSERT语句中插入多个记录:

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

答案 1 :(得分: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

第一个选项会获得相同的结果,但它不是一个循环(这就是你要求的)。