测试事务提交

USE TestDB
GO

--数据结构
CREATE TABLE TUser
(
    FID INT IDENTITY(1,1) PRIMARY KEY,
    FCompanyID INT NOT NULL,
    FName VARCHAR(30) NOT NULL,
    FAddTime DATETIME DEFAULT(GETDATE()),
    FSessionID INT DEFAULT(@@SPID)
)
GO

 

--会话窗口54
INSERT INTO TUser(FCompanyID,FName) VALUES (101,'test101')
INSERT INTO TUser(FCompanyID,FName) VALUES (NULL,'test102')  --ERROR
INSERT INTO TUser(FCompanyID,FName) VALUES (103,NULL)        --ERROR
INSERT INTO TUser(FCompanyID,FName) VALUES (104,'test104')
GO

SELECT * FROM TUser
GO
(1 行受影响)
消息 515,级别 16,状态 2,第 4 行
不能将值 NULL 插入列 'FCompanyID',表 'TestDB.dbo.TUser';列不允许有 Null 值。INSERT 失败。
语句已终止。
消息 515,级别 16,状态 2,第 5 行
不能将值 NULL 插入列 'FName',表 'TestDB.dbo.TUser';列不允许有 Null 值。INSERT 失败。
语句已终止。

(1 行受影响)

(2 行受影响)

 

只回滚错误行,语句还继续执行。

--会话窗口55
TRUNCATE TABLE TUser
GO


BEGIN TRAN
    INSERT INTO TUser(FCompanyID,FName) VALUES (101,'test101')
    INSERT INTO TUser(FCompanyID,FName) VALUES (NULL,'test102') --ERROR
    INSERT INTO TUser(FCompanyID,FName) VALUES (103,NULL)       --ERROR
    INSERT INTO TUser(FCompanyID,FName) VALUES (104,'test104')
COMMIT TRAN    
GO

SELECT * FROM TUser
GO
(1 行受影响)
消息 515,级别 16,状态 2,第 8 行
不能将值 NULL 插入列 'FCompanyID',表 'TestDB.dbo.TUser';列不允许有 Null 值。INSERT 失败。
语句已终止。
消息 515,级别 16,状态 2,第 9 行
不能将值 NULL 插入列 'FName',表 'TestDB.dbo.TUser';列不允许有 Null 值。INSERT 失败。
语句已终止。

(1 行受影响)

(2 行受影响)

 

事务终止并全部回滚。

--会话窗口56
TRUNCATE TABLE TUser
GO


BEGIN TRY
    BEGIN TRAN
        INSERT INTO TUser(FCompanyID,FName) VALUES (101,'test101')
        INSERT INTO TUser(FCompanyID,FName) VALUES (NULL,'test102') --ERROR
        INSERT INTO TUser(FCompanyID,FName) VALUES (103,NULL)       --ERROR
        INSERT INTO TUser(FCompanyID,FName) VALUES (104,'test104')
    COMMIT TRAN    
END TRY
BEGIN CATCH
    ROLLBACK TRAN
    PRINT N'异常,回滚操作--' + ERROR_MESSAGE()
END CATCH    
GO

SELECT * FROM TUser
GO
(1 行受影响)

(0 行受影响)
异常,回滚操作--不能将值 NULL 插入列 'FCompanyID',表 'TestDB.dbo.TUser';列不允许有 Null 值。INSERT 失败。

(0 行受影响)

 

 

每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚。

事务在错误行终止,错误行回滚,错误之前的不会滚。

--会话窗口57
TRUNCATE TABLE TUser
GO


SET XACT_ABORT ON

INSERT INTO TUser(FCompanyID,FName) VALUES (101,'test101')
INSERT INTO TUser(FCompanyID,FName) VALUES (NULL,'test102') --ERROR
INSERT INTO TUser(FCompanyID,FName) VALUES (103,NULL)       --ERROR
INSERT INTO TUser(FCompanyID,FName) VALUES (104,'test104')

GO

SELECT * FROM TUser
GO
(1 行受影响)
消息 515,级别 16,状态 2,第 9 行
不能将值 NULL 插入列 'FCompanyID',表 'TestDB.dbo.TUser';列不允许有 Null 值。INSERT 失败。

(1 行受影响)

 

总体作为一个事务,整体提交或整体回滚。

事务终止并全部回滚。

--会话窗口58
TRUNCATE TABLE TUser
GO


SET XACT_ABORT ON

BEGIN TRAN
    INSERT INTO TUser(FCompanyID,FName) VALUES (101,'test101')
    INSERT INTO TUser(FCompanyID,FName) VALUES (NULL,'test102') --ERROR
    INSERT INTO TUser(FCompanyID,FName) VALUES (103,NULL)       --ERROR
    INSERT INTO TUser(FCompanyID,FName) VALUES (104,'test104')
COMMIT TRAN
GO

SELECT * FROM TUser
GO
(1 行受影响)
消息 515,级别 16,状态 2,第 9 行
不能将值 NULL 插入列 'FCompanyID',表 'TestDB.dbo.TUser';列不允许有 Null 值。INSERT 失败。

(0 行受影响)

 

posted @ 2017-05-17 22:55  茗::流  阅读(276)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。