繁体   English   中英

SCOPE_IDENTITY会在这种情况下工作吗?

[英]Will SCOPE_IDENTITY Work in this Case?

我有PK是自增量键。 我需要将记录插入数据库,然后将PK恢复并在另一个插入中使用它。

但是我想在一次交易中这样做。 那可能吗。 我的想法是,如果在我必须做的任何更新/插入中出现故障,那么我可以回滚所有内容,但我的印象是我需要进行提交。

我最初会在ado.net中这样做,但后来切换到存储过程,因为我认为可能会解决这个问题。

在这种情况下,SP会帮助我吗?

是的,scope_identity将为您提供最新的插入ID。 作为替代方案,如果您使用的是sql server 2005+,则可以使用output子句

INSERT INTO [MyTable]([MyCol])
OUTPUT INSERTED.ID
SELECT [MyCol] FROM [MySourceTable];

怎么样:

BEGIN TRANSACTION
BEGIN TRY

   INSERT INTO dbo.YourFirstTable(.....)
   VALUES(.......)

   DECLARE @newID INT
   SELECT @newID = SCOPE_IDENTITY()

   INSERT INTO dbo.YourSecondTable(ID, .......)
   VALUES(@newID, ........)

   COMMIT TRANSACTION
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage

    ROLLBACK TRANSACTION
END CATCH

应该适用于任何版本的SQL Server 2005或更高版本

只需获取SCOPE_IDENTITY()值,您肯定不会 “破坏”事务...将其包装到例如存储过程中,或者只是从您的调用代码中调用它。

暂无
暂无

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

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