代码之家  ›  专栏  ›  技术社区  ›  Hugo Migneron

在SQL中使用什么来代替“Foreach”循环

  •  2
  • Hugo Migneron  · 技术社区  · 15 年前

    我正在尝试用SQL编写一个存储过程,它将:

    从表1中进行select查询,该查询将返回多个值 在表2中插入新值(在表1上选择返回的每个记录在表2中有一条新记录)。

    我会在C#中使用foreach,但我知道SQL不是这样工作的。正确的做法是什么?

    谢谢

    5 回复  |  直到 15 年前
        1
  •  9
  •   David Hedlund    15 年前
    INSERT INTO tabl2 (name, id)
       SELECT name, id FROM table1
    

    编辑

    我应该补充一点,循环在SQL中确实非常有用,所以您可能也想知道如何做到这一点。这里有一个例子:

    DECLARE @temp TABLE (ix int identity(1,1), id int, name varchar(100))
    
    INSERT INTO @temp SELECT id, name FROM table1
    
    DECLARE @i int, @max int
    
    SELECT
       @i = 0
       @max = MAX(ix)
    FROM
       @temp
    
    WHILE @i < @max
    BEGIN
       SET @i = @i + 1
    
       -- LOGIC HERE...
    
    END
    
        2
  •  2
  •   n8wrl    15 年前

    您可以使用基于逐行的光标,但这实际上是最后的选择。我很少发现这是唯一的办法。

        3
  •  2
  •   Scott Ivey    15 年前

    INSERT Table2
           (Col1,
            Col2)
    SELECT T1Col1,
           T1Col2
    FROM   Table1
    WHERE  T1Col2 = 'whatever'
    
        4
  •  1
  •   blu    15 年前

    可以使用select作为插入的值

    INSERT INTO Table1
    (
        FieldA,
        FieldB
    )
    SELECT
        FieldA,
        FieldB
    FROM Table2
    
        5
  •  1
  •   Thorarin    15 年前

    在这种情况下不需要“foreach”。对于你所做的罕见案例,请调查 cursors while-loop

    对于您的插入,应该执行以下操作:

    INSERT INTO table2 (name, id)
       SELECT name, id FROM table1
    

    (为完整起见复制)