SQL Server 05:插入新表并从旧表和新创建的ID中获取ID

时间:2011-03-09 14:39:43

标签: sql sql-server-2005 insert

我有3个表,一个已经预先填充了数据,另外两个是全新的。

我的第一张表(预先填好的表)如下所示:

commentId, commentText, user_id, moderated, isDeleted, date_created

我的第二张表格如下:

ActionID, moderated, isDeleted, reasonText, isReffered, isAllowed

我的第三个表格如下:

ID, ActionID, CommentID

我希望能做的是:

Insert into ActionTable (moderated, isDeleted)
Select moderated, isDeleted
From CommentTable

并获取原始的commentID和新创建的ActionID,以插入我的第三个表ActionCommentLink

干杯。

2 个答案:

答案 0 :(得分:1)

我假设你在ActionID上有自动身份?

为什么需要ActionCommentLink?根据您描述的过程,还没有n:m关系。

如果这是一次性工作,最快的方法是暂时将commentId列添加到ActionTable并使用插入填充它。如果您实际上不需要ActionCommentLink,那么您已经完成了。否则请查询ActionTable以填充链接,然后从ActionTable中删除commentId。

如果您需要多次执行此操作,请使用光标并使用@@Identity函数查询上次插入的ActionID

答案 1 :(得分:0)

只需使用OUTPUT。这直接来自帮助文件:

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table( NewScrapReasonID smallint,
                           Name varchar(50),
                           ModifiedDate datetime);
INSERT Production.ScrapReason
    OUTPUT INSERTED.ScrapReasonID, INSERTED.Name, INSERTED.ModifiedDate
        INTO @MyTableVar
VALUES (N'Operator error', GETDATE());

--Display the result set of the table variable.
SELECT NewScrapReasonID, Name, ModifiedDate FROM @MyTableVar;
--Display the result set of the table.
SELECT ScrapReasonID, Name, ModifiedDate 
FROM Production.ScrapReason;
GO