【发布时间】:2023-04-07 23:01:01
【问题描述】:
我必须使用插入和更新指令执行 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');
在第一个块中有两条指令,第一个是可以的,第二个失败是因为第二个表不存在。
第二个block里面也有两条指令,都可以。
我想要做的是运行两个块
- 第一个块最后应该什么都不做,因为第二个指令失败,第一个应该回滚
- 第二个块没问题,因为没有错误,两个插入都应该提交
这样做的正确方法是什么?也许是一个接受全文参数并将所有代码作为事务运行的存储过程?如何在 SQL Server 中做到这一点?
【问题讨论】:
-
首先,
select max(id) + 1是个坏主意——我建议你使用identity或sequence。其次,这是解决此问题的众多解决方案之一:stackoverflow.com/questions/1749719/…
标签: sql-server sql-server-2008 pentaho-data-integration