Мне нужно выполнить блоки 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?