SQL Server:如何将一次插入的结果用于另一次插入
我有一个存储过程,用于同时更新两个表 这里我的问题是,第一个表有一个自动递增的ID列(“commentID”),而我的第二个表与此有关系,因此我需要从第一次插入中新创建的ID,以便进行第二次插入 我尝试了以下我可以保存而没有错误的方法,但它没有按预期执行,也没有按预期更新表。 有人能告诉我我做错了什么吗 我的SQL: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',
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