当我执行此脚本时,即使第二个INSERT
由于对Fluffiness的NOT NULL约束而失败,第一个INSERT
也可以工作。为什么第一行仍然存在,为什么不回滚?
BEGIN TRAN
INSERT INTO tCat(Cat, Fluffiness) VALUES('Sir Pounce A Lot', 8.0)
INSERT INTO tCat(Cat) VALUES('Violet')
COMMIT
这是表格脚本
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tCat]
(
[CatID] [INT] IDENTITY(1,1) NOT NULL,
[Cat] [NCHAR](100) NOT NULL,
[CatBreedID] [INT] NULL,
[Fluffiness] [FLOAT] NOT NULL,
CONSTRAINT [PK_tCat]
PRIMARY KEY CLUSTERED ([CatID] ASC)
) ON [PRIMARY]
最佳答案
您需要使用SET XACT_ABORT ON
:
SET XACT_ABORT ON;
BEGIN TRAN
INSERT INTO tCat(Cat, Fluffiness) VALUES('Sir Pounce A Lot', 8.0)
INSERT INTO tCat(Cat) VALUES('Violet')
COMMIT
db<>fiddle demo 相关文章:Error Handling in SQL by Erland Sommarskog
关于sql - 为什么不回滚此事务?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53179311/