Transaktionshantering med XACT_ABORT

Oopps! Upgrade your browser pretty please. Oopps! Upgrade your browser pretty please.

Personligen så är jag ingen vän av implicita händelser som implicita konverteringar eller implicita transaktioner, men det ändå viktigt att känna till skillnaden i resultat mellan XACT_ABORT ON och XACT_ABORT OFF. Med XACT_ABORT ON så sker en implicit ROLLBACK TRANSACTION vid ett eventuellt fel, exempelvis på grund av en check constraint. I nedanstående kod så kommer den första posten i insert att läggas till i tabellen X och den andra kommer inte läggas till, MEN om du ändrar till SET XACT_ABORT ON så kommer även den första posten att rullas tillbaka när den andra posten bryter mot check constrainten. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[x]( [test] [int] IDENTITY(1,1) NOT NULL, [prodid] [int] INT NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[x] WITH CHECK ADD CONSTRAINT [CK_x] CHECK (([PRODID]>=(1) AND [PRODID]<=(3))) GO SET XACT_ABORT OFF BEGIN TRAN INSERT INTO dbo.x (prodid) VALUES(1) INSERT INTO dbo.x (prodid) VALUES(4) COMMIT TRAN SELECT [test],prodid FROM [dbo].[x]

Har du några frågor så är du välkommen att kontakta oss så kommer någon av våra SQL server konsulter att hjälpa dig.