gpt4 book ai didi

sql-server-2008 - 如何在sql server中提交和回滚事务?

转载 作者:行者123 更新时间:2023-12-03 20:01:29 27 4
gpt4 key购买 nike

我有一个巨大的脚本,用于从一台服务器创建表和移植数据。所以这个 sceipt 基本上有 -

  • 为表创建语句。
  • 插入以将数据移植到这些新创建的表中。
  • 为存储过程创建语句。

  • 所以我有这个代码但它基本上不起作用@@ERROR我认为总是零..
    BEGIN TRANSACTION
    --CREATES
    --INSERTS
    --STORED PROCEDURES CREATES
    -- ON ERROR ROLLBACK ELSE COMMIT THE TRANSACTION
    IF @@ERROR != 0
    BEGIN

    PRINT @@ERROR
    PRINT 'ERROR IN SCRIPT'
    ROLLBACK TRANSACTION
    RETURN
    END
    ELSE
    BEGIN
    COMMIT TRANSACTION
    PRINT 'COMMITTED SUCCESSFULLY'
    END
    GO

    谁能帮我写一个事务,如果一切正常,它基本上会回滚错误并提交..我可以使用 RaiseError吗?不知何故在这里..

    最佳答案

    不要使用 @@ERROR , 使用 BEGIN TRY/BEGIN CATCH反而。看这篇文章:Exception handling and nested transactions对于示例程序:

    create procedure [usp_my_procedure_name]
    as
    begin
    set nocount on;
    declare @trancount int;
    set @trancount = @@trancount;
    begin try
    if @trancount = 0
    begin transaction
    else
    save transaction usp_my_procedure_name;

    -- Do the actual work here

    lbexit:
    if @trancount = 0
    commit;
    end try
    begin catch
    declare @error int, @message varchar(4000), @xstate int;
    select @error = ERROR_NUMBER(), @message = ERROR_MESSAGE(), @xstate = XACT_STATE();
    if @xstate = -1
    rollback;
    if @xstate = 1 and @trancount = 0
    rollback
    if @xstate = 1 and @trancount > 0
    rollback transaction usp_my_procedure_name;

    raiserror ('usp_my_procedure_name: %d: %s', 16, 1, @error, @message) ;
    return;
    end catch
    end

    关于sql-server-2008 - 如何在sql server中提交和回滚事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935900/

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