SQL 服务器存储过程到 运行 insert/update 事务中

SQL Server stored procedure to run insert/update in transaction

我必须执行带有插入和更新指令的 T-SQL 块。

假设我有这两个代码块,但我无法直接控制它们。

区块#1:

insert into mytable (id, col1) 
values ((select max(id) + 1 from mytable), 'foo');

insert into non_existing_table (id, col1)  
values ((select max(id) from mytable), 'bar');

第 2 块:

insert into mytable (id, col1) 
values ((select max(id) + 1 from mytable), 'foo');

insert into anothertable (id, col1) 
values ((select max(id) from mytable), 'bar');

在第一个块中有两个指令,第一个可以,第二个失败,因为第二个 table 不存在。

第二块也有两条指令,都可以。

我想做的是运行两个街区

正确的做法是什么?也许是接受全文参数和 运行 所有代码作为事务的存储过程?我如何在 SQL 服务器中做到这一点?

您可以创建带有事务的存储过程。 像这样尝试。

CREATE PROCEDURE [dbo].[Procedure_name]
@iErrorCode int OUTPUT,
--other parameters
AS
BEGIN
   BEGIN TRY
     begin tran

        insert into mytable (id,col1) values ((select max(id)+1 from mytable),'foo');
        insert into non_existing_table (id,col1) values ((select max(id) from mytable),'bar');
        --other queries

     commit tran
     SELECT  @iErrorCode =@@ERROR;
   END TRY
   BEGIN CATCH
      rollback tran
      Select ERROR_NUMBER();
      Select ERROR_MESSAGE();
      SELECT  @iErrorCode =@@ERROR
   END CATCH
END