繁体   English   中英

SQL Server:如何将一个INSERT的结果用于另一INSERT

[英]SQL Server: How to use result from one INSERT for another INSERT

我有一个存储过程,旨在一次更新两个表。

我的问题是,第一个表具有自动递增的ID列(“ commentID”),而第二个表对此具有关系,因此我需要从第一个INSERT中新创建的ID才能制成第二个INSERT

我尝试了以下内容,可以将其保存为没有错误,但是它没有按预期执行,也没有按预期更新表。 有人可以告诉我我在做什么错吗?

我的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)
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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM