понедельник, 18 марта 2013 г.

Откатывается ли транзакция, если одна из инструкций входящих в нее завершается ошибкой


-- Откатывается ли транзакция, если одна из инструкций входящих в нее завершается ошибкой

USE Specialist

IF OBJECT_ID('dbo.Account') IS NOT NULL
DROP TABLE Account
CREATE TABLE Account
(
    AccountID INT IDENTITY
    ,Cmts NVARCHAR(100)
    ,Bal MONEY DEFAULT 0 CHECK (Bal >= 0)
    ,DT DATETIMEOFFSET DEFAULT SYSDATETIMEOFFSET()
)

SELECT @@TRANCOUNT
SELECT * FROM Account

    INSERT Account (Cmts, Bal) VALUES ('Account 1', 1000)
    INSERT Account (Cmts,Bal)  VALUES ('Accoont 2', 0)

BEGIN TRAN
    UPDATE Account
    SET Bal -= 2000
    WHERE AccountID = 1
    UPDATE Account
    SET Bal += 2000
    WHERE AccountID = 2
COMMIT TRAN

SELECT @@TRANCOUNT
SELECT * FROM Account

-- Каков результат?