我需要创建一个存储过程来执行以下操作;
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创建上述每条记录。
任何帮助/建议都会受到高度赞赏。
谢谢!
已关闭 - 由于其他要求,问题已作为新问题发布。谢谢!
答案 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