возникновении любой проблемы в ней?
Ситуация: написал скрипт примерно следующего вида:
SET XACT_ABORT ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
CREATE TABLE dbo.Foo (Value NVARCHAR(100) NOT NULL)
GO
INSERT INTO dbo.Foo (Value)
SELECT TRIM(b.Value) FROM dbo.Bar AS b
GO
ALTER TABLE dbo.Bar DROP COLUMN Value
GO
COMMIT
В итоге: оказалось, что версия сервера была 2012 и на ней не существует функция TRIM. При этом таблица создалась, колонка удалилась (потерялись данные), транзакция не откатилась.
Получается, XACT_ABORT ON делает не то, что я думаю? Есть ли способ лучше, без необходимость обмазывать каждую инструкцию отдельными проверками?
ROLLBACK TRANSACTION
Все откатилось. Только на момент ошибки.
Я написал почему.
Обсуждают сегодня