SQL Server:如何将一次插入的结果用于另一次插入

SQL Server:如何将一次插入的结果用于另一次插入,sql,sql-server,select,insert,output,Sql,Sql Server,Select,Insert,Output,我有一个存储过程,用于同时更新两个表 这里我的问题是,第一个表有一个自动递增的ID列(“commentID”),而我的第二个表与此有关系,因此我需要从第一次插入中新创建的ID,以便进行第二次插入 我尝试了以下我可以保存而没有错误的方法,但它没有按预期执行,也没有按预期更新表。 有人能告诉我我做错了什么吗 我的SQL: ALTER PROCEDURE [dbo].[MOC_UpdateComment] @imgID int, @commentID int = '999999',

我有一个存储过程,用于同时更新两个表

这里我的问题是,第一个表有一个自动递增的ID列(“commentID”),而我的第二个表与此有关系,因此我需要从第一次插入中新创建的ID,以便进行第二次插入

我尝试了以下我可以保存而没有错误的方法,但它没有按预期执行,也没有按预期更新表。 有人能告诉我我做错了什么吗

我的SQL:

ALTER PROCEDURE [dbo].[MOC_UpdateComment]
    @imgID int,
    @commentID int = '999999',
    @comment nvarchar(1000),
    @lastUpdate nvarchar(50),
    @modBy varchar(50)
AS
BEGIN
    DECLARE @temp AS TABLE
        (
                commentID int
        )

    SET NOCOUNT ON; 

    BEGIN TRANSACTION;

        INSERT INTO MOC_BlogComments
        (
                imgID, 
                comment
        )
        OUTPUT  inserted.commentID INTO @temp(commentID)
        SELECT  @imgID,
                @comment

        INSERT INTO MOC_LogComments
        (
                commentID,
                lastUpdate,
                modTime,
                modBy   
        )
        SELECT  commentID,
                @lastUpdate,
                GETDATE(),
                @modBy
        FROM    @temp

    COMMIT TRANSACTION;  
END
函数SCOPE_IDENTITY()返回上次插入操作的标识。您可以使用它来获取需要在第二条INSERT语句中使用的值

您可以在声明中这样使用它:

INSERT INTO MORC_BlogComments (imgID, comment)
VALUES (@imgID, @comment)

INSERT INTO MORC_LogComments (commentID, lastUpdate, modTime, modBy)
VALUES (SCOPE_IDENTITY(), @lastUpdate, GETDATE(), @modBy)

非常感谢!我将在上面的哪个地方实现这一点?另外,你能告诉我上面的错误是什么吗,因为我认为输出也是一个选项?输出实际上是一个更好的选项,因为在某些情况下,SCOPE_IDENTITY()可以提供不正确的结果。您的第二次(我假设)插入出现了什么问题?似乎您试图不适当地插入标识值。注释掉第一个插页中的'imgID,**号,其余的现在应该可以了。非常感谢-这很完美,正是我想要的。
DECLARE @imgID      INT, 
        @commentID  INT = '999999', 
        @comment    NVARCHAR(1000), 
        @lastUpdate NVARCHAR(50), 
        @modBy      VARCHAR(50) 
DECLARE @MORC_BlogComments AS TABLE 
  ( 
     id      INT IDENTITY(1, 1) NOT NULL, 
     imgid   INT, 
     comment VARCHAR(100) 
  ) 
DECLARE @MORC_LogComments AS TABLE 
  ( 
     commentid  INT, 
     lastupdate DATETIME, 
     modtime    DATETIME, 
     modby      VARCHAR(100) 
  ) 
DECLARE @TEMP AS TABLE 
  ( 
     commentid INT 
  ) 

SET nocount ON; 

BEGIN TRANSACTION; 

INSERT INTO @MORC_BlogComments 
            (imgid, 
             comment) 
output      inserted.id 
INTO @TEMP(commentid) 
VALUES     (@imgID, 
            @comment) 

INSERT INTO @MORC_LogComments 
            (commentid, 
             lastupdate, 
             modtime, 
             modby) 
SELECT commentid, 
       @lastUpdate, 
       Getdate(), 
       @modBy 
FROM   @temp 

SELECT * 
FROM   @MORC_LogComments