选择以检索多行,然后循环结果为Insert语句

时间:2012-10-09 15:57:19

标签: sql sql-server sql-server-2008 tsql stored-procedures

我需要创建一个存储过程来执行以下操作;

    SELECT * FROM TABLE1

然后返回每行;

    INSERT INTO TABLE2 (column1, column2, column3,...) 
    VALUES (value1, value2, value3,...)

我将如何做到这一点?

更新 **

所以基于到目前为止的响应我得到了以下sql;

INSERT INTO recEntrantStatus (entrantId, roundId, judgeId)
SELECT entrantId, judgeId
FROM recEntrantStatus
WHERE roundId = 0
AND voted = true
AND enterNextround = true

但是我需要在roundId列中的新创建的记录中添加一个固定值,例如输入@round。

我该怎么做?

感谢。

-------------------------------------更新2 -------- -----------------------------------

所以感谢你们的一些重要帮助,我现在得到了以下在这个阶段很有用的SQL:

  INSERT INTO recEntrantStatus (entrantId, roundId, judgeId, notified, voted, enterNextRound)
  SELECT entrantId, (@round + 1), judgeId, 0, 0, 0
  FROM recEntrantStatus
  WHERE roundId = @round
  AND voted = 1
  AND enterNextround = 1

此代码检查'enterNextRound'为true的所有记录,然后为每个记录创建一条新记录。

但是,我现在需要扩展它,以便:

A)检查所有评委的第二张桌子(tblJudges)并获得所有评委Id(Id)的数组

B)与上面的例子相同,只是现在为从步骤A获得的每个评委/评委Id创建上述每条记录。

任何帮助/建议都会受到高度赞赏。

谢谢!

已关闭 - 由于其他要求,问题已作为新问题发布。谢谢!

2 个答案:

答案 0 :(得分:3)

CREATE PROCEDURE myProcedure
AS
    INSERT INTO table2 (col1, col2, col3)
    SELECT      col1, col2, col3
    FROM        table1
GO

或类似的东西应该有用。 SQL Server允许您直接从INSERT语句执行SELECT

请注意,这实际上不需要是存储过程,除非有更多内容(业务逻辑或条件,您希望在所有实现中保持静态)。


更新

CREATE PROCEDURE myprocedure @roundId DECIMAL(5,2)
AS
  INSERT INTO   recEntrantStatus
               (entrantId, roundId, judgeId)
  SELECT        entrantId, roundId, judgeId
  FROM          recEntrantStatus
  WHERE         roundId = @roundId
    AND         voted = 1
    AND         enterNextRound = 1
GO 

答案 1 :(得分:1)

INSERT有两个允许的语法。你上面给的是一个,但你也可以这样做:

INSERT INTO
    Table1(col1, col2, col3)
SELECT
    Col1,
    Col2,
    Col3
FROM
    Table2