我有PK是自增量键。我需要将记录插入数据库,然后将PK恢复并在另一个插入中使用它。
但是我想在一次交易中这样做。那可能吗。我的想法是,如果在我必须做的任何更新/插入中出现问题,那么我可以回滚所有内容,但我的印象是我需要提交。
我最初会在ado.net上做这件事,但后来切换到存储过程,因为我认为可能会解决这个问题。
在这种情况下SP会帮助我吗?
答案 0 :(得分:5)
是的,scope_identity将为您提供最新的插入ID。作为替代方案,如果您使用的是sql server 2005+,则可以使用output clause。
INSERT INTO [MyTable]([MyCol])
OUTPUT INSERTED.ID
SELECT [MyCol] FROM [MySourceTable];
答案 1 :(得分:2)
怎么样:
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()
值,您肯定不“打破”交易...将其包装到例如存储过程,或者只是从您的调用代码中调用它。