如何在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])
}
有可能吗?
答案 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
第一个选项会获得相同的结果,但它不是一个循环(这就是你要求的)。