0

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

    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”为真的所有记录,然后为每个记录创建一个新记录。

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

A)检查所有评委的第二个表(tblJudges)并获取所有评委ID(Id)的数组

B) 执行与上述示例相同的操作,只是现在为从步骤 A 获得的每个评委/评委 ID 创建上述每个记录。

任何帮助/建议将一如既往地不胜感激。

谢谢!

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

4

2 回答 2

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 
于 2012-10-09T16:02:13.037 回答
1

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

INSERT INTO
    Table1(col1, col2, col3)
SELECT
    Col1,
    Col2,
    Col3
FROM
    Table2
于 2012-10-09T16:01:57.567 回答