【问题标题】: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')
    

    【讨论】:

    • 这正是我要找的。​​span>
    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2020-03-04
      • 2014-02-22
      相关资源
      最近更新 更多