2010-08-01 124 views
0

如何在T-SQL中编写此代码?tsql for循环列表

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 2010-08-01 18:14:26

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 

第一个选项将达到相同的结果,但它不是一个循环(这是你要求的)。