gpt4 book ai didi

sql-server - 使用交易-最佳做法

转载 作者:行者123 更新时间:2023-12-02 08:07:45 25 4
gpt4 key购买 nike

假设我在SQL Server中有一个过程为:

create procedure BULKINSERT
AS
INSERT INTO TABLEB (
SELECT NAME, ID From TableA
)
GO

一种简单的方法,可以从 TABLE A 中读取数据,并将其插入 TABLE B 中。如果我有100万条记录要插入表B中,并且一条记录由于某种原因而失败,那么在这种情况下,我是否应该使用 TRANSACTION

我应该回滚整个操作吗?

最佳答案

您可以将以下模板用于存储过程:

SET NOCOUNT, XACT_ABORT ON;

BEGIN TRY

BEGIN TRANSACTION;
-- CODE BLOCK GOES HERE
COMMIT TRANSACTION;

END TRY
BEGIN CATCH

IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION
END;

-- GET ERRORS DETAILS OR THROW ERROR

END CATCH;

SET NOCOUNT, XACT_ABORT OFF;

更多细节:
  • XACT_ABORT-指定当Transact-SQL语句引发运行时错误时,SQL Server是否自动回滚当前事务;
  • ,如果您需要有关错误的信息(ERROR_MESSAGE,ERROR_LINE,ERROR_NUMBER,ERROR_PROCEDURE,ERROR_SEVERITY,ERROR_STATE)

  • 这是处理事务的通用技术。我会推荐 Erland Sommarskog的以下文章:
  • Error and Transaction Handling in SQL ServerPart One – Jumpstart Error Handling
  • Error and Transaction Handling in SQL ServerPart Two – Commands and Mechanisms
  • 关于sql-server - 使用交易-最佳做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49849676/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com