我必须使用插入和更新指令来执行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');
在第一个块中有两个指令,第一个可以,第二个失败,因为第二个表不存在。
在第二个块中,还有两条指令,都可以。
我想做的是同时运行两个程序段
正确的方法是什么?也许存储过程接受全文参数并以事务方式运行所有代码?如何在SQL Server中做到这一点?
答案 0 :(得分:1)
您可以使用事务创建存储过程。 尝试这样。
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