导航

事务回滚 SET XACT_ABORT ON

Posted on 2019-03-19 11:12  yiyishuitian  阅读(187)  评论(0编辑  收藏  举报
USE tempdb

IF OBJECT_ID ('dbo.test') IS NOT NULL
    DROP TABLE dbo.test
GO
CREATE TABLE dbo.test
    (
    id INT NOT NULL,
    CONSTRAINT pk_id PRIMARY KEY (id)
    )
GO


BEGIN TRANSACTION


INSERT INTO dbo.test(id)VALUES (0 )
INSERT INTO dbo.test(id)VALUES (1 )
INSERT INTO dbo.test(id)VALUES (1 )
INSERT INTO dbo.test(id)VALUES (2 )

COMMIT TRANSACTION



/*******结果**********

(1 行受影响)

(1 行受影响)
消息 2627,级别 14,状态 1,第 19 行
违反了 PRIMARY KEY 约束“pk_id”。不能在对象“dbo.test”中插入重复键。重复键值为 (1)。
语句已终止。

(1 行受影响)
*/




SELECT *FROM  dbo.test

/**********结果*********

id
0
1
2
*/


TRUNCATE TABLE dbo.test

SET XACT_ABORT ON

BEGIN TRANSACTION


INSERT INTO dbo.test(id)VALUES (0 )
INSERT INTO dbo.test(id)VALUES (1 )
INSERT INTO dbo.test(id)VALUES (1 )
INSERT INTO dbo.test(id)VALUES (2 )

COMMIT TRANSACTION

/**********结果************
(1 行受影响)

(1 行受影响)
消息 2627,级别 14,状态 1,第 61 行
违反了 PRIMARY KEY 约束“pk_id”。不能在对象“dbo.test”中插入重复键。重复键值为 (1)。
*/



SELECT *FROM  dbo.test


/******结果为空************/