【问题标题】:tsql for loop on a listtsql for 列表上的循环
【发布时间】:2010-08-01 18:08:41
【问题描述】:
如何在 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])
}
有可能吗?
【问题讨论】:
标签:
tsql
sql-server-2008
for-loop
【解决方案1】:
Sql Server 2008 允许在单个 INSERT 语句中插入多条记录:
INSERT INTO Categories (id, name)
VALUES (0, 'cat1'),
(1, 'another category'),
(2, 'one more')
【解决方案2】:
你有两个选择:
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
第一个选项将达到相同的结果,但它不是一个循环(这是您要求的)。