Я работаю над pymssql, драйвером Python MSSQL. Я столкнулся с интересной ситуацией, для которой я не могу найти документацию. Похоже, что при сбое оператора CREATE TABLE транзакция, в которой он был выполнен, неявно откатывается:
-- shows 0
select @@TRANCOUNT
BEGIN TRAN
-- will cause an error
INSERT INTO foobar values ('baz')
-- shows 1 as expected
select @@TRANCOUNT
-- will cause an error
CREATE TABLE badschema.t1 (
test1 CHAR(5) NOT NULL
)
-- shows 0, this is not expected
select @@TRANCOUNT
Я хотел бы понять, почему это происходит, и знать, есть ли документы, описывающие ситуацию. Я собираюсь кодировать это поведение в драйвере, но хочу убедиться, что я делаю это для любых других типов ошибок, которые неявно откатывают транзакцию.
Примечание
Меня не интересует типичное поведение транзакций. Я специально хочу знать, почему неявный откат дается в случае неудачного оператора CREATE, но не с оператором INSERT.