Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 05:插入到新表并从旧表获取ID,从新表获取新创建的ID_Sql_Sql Server 2005_Insert - Fatal编程技术网

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

SQL Server 05:插入到新表并从旧表获取ID,从新表获取新创建的ID,sql,sql-server-2005,insert,Sql,Sql Server 2005,Insert,我有3个表,其中一个已经预先填充了数据,另外两个是全新的 我的第一个表(预填充的表)如下所示: commentId, commentText, user_id, moderated, isDeleted, date_created 我的第二张桌子看起来像: ActionID, moderated, isDeleted, reasonText, isReffered, isAllowed ID, ActionID, CommentID 我的第三张桌子看起来像: ActionID, moder

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

我的第一个表(预填充的表)如下所示:

commentId, commentText, user_id, moderated, isDeleted, date_created
我的第二张桌子看起来像:

ActionID, moderated, isDeleted, reasonText, isReffered, isAllowed
ID, ActionID, CommentID
我的第三张桌子看起来像:

ActionID, moderated, isDeleted, reasonText, isReffered, isAllowed
ID, ActionID, CommentID
我希望能够做到的是:

Insert into ActionTable (moderated, isDeleted)
Select moderated, isDeleted
From CommentTable
并获取原始的commentID和新创建的ActionID,以插入到我的第三个表ActionCommentLink中


大家干杯。

我想您在
ActionID
上有一个自动身份

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

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


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

我假定您在
ActionID
上有自动标识

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

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


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

只需使用输出即可。这直接来自帮助文件:

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

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

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

确实存在n:m关系,因此需要ActionCommentLink。我开始认为我必须在ActionTable上创建一个临时列,但我想知道是否有更聪明的方法。确实存在n:m关系,因此为什么需要ActionCommentLink。我开始认为我必须在ActionTable上创建一个临时列,但我想知道是否有更聪明的方法。据我所知,输出将不起作用,因为它处理插入的值。而我想要的是原始注释表中的值,而不是ActionTable中的ID。除非我误解了。我没有看到在你原来的问题中提到删除任何内容。如果要处理已删除的表值,也可以在触发器中轻松完成,但也可以使用如下输出子句完成:DELETE Sales.shoppingcartime output deleted.*;据我所知,输出无法工作,因为它处理插入的值。而我想要的是原始注释表中的值,而不是ActionTable中的ID。除非我误解了。我没有看到在你原来的问题中提到删除任何内容。如果要处理已删除的表值,也可以在触发器中轻松完成,但也可以使用如下输出子句完成:DELETE Sales.shoppingcartime output deleted.*;你提到抓取原始注释id,这让我觉得你想更新一些东西,但你的查询只涉及插入。插入是一个新项目,如果插入,则没有原始项目。你是说更新吗?一次突袭?如果我没有说清楚的话,我很抱歉。我想做的是将已经存在的名为comments的表中的细节插入名为ActionTable的新表中。然后我想插入另一个名为ActionCommentLink的新表,它将是原始的CommentID(没有插入任何地方)和ActionID,ActionID是ActionTable上新创建的ID。如果不清楚,我再次表示歉意。您提到获取原始评论id,这使我认为您想要更新某些内容,但您的查询只涉及插入。插入是一个新项目,如果插入,则没有原始项目。你是说更新吗?一次突袭?如果我没有说清楚的话,我很抱歉。我想做的是将已经存在的名为comments的表中的细节插入名为ActionTable的新表中。然后我想插入另一个名为ActionCommentLink的新表,它将是原始的CommentID(没有插入任何地方)和ActionID,ActionID是ActionTable上新创建的ID。如果这还不清楚,我再一次感到抱歉。