[英]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.