nic*_*omp 2 sql t-sql sql-server transactions
当我执行这个脚本时,第一个脚本INSERT工作,即使第二个脚本INSERT由于Fluffiness上的NOT NULL约束而失败.为什么第一行仍然存在,为什么不回滚?
BEGIN TRAN
INSERT INTO tCat(Cat, Fluffiness) VALUES('Sir Pounce A Lot', 8.0)
INSERT INTO tCat(Cat) VALUES('Violet')
COMMIT
Run Code Online (Sandbox Code Playgroud)
这是表脚本
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]
Run Code Online (Sandbox Code Playgroud)
你需要使用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
Run Code Online (Sandbox Code Playgroud)
相关文章:Erland Sommarskog在SQL中的错误处理
此表列出了一些常见错误,以及它们是中止当前语句还是整个批处理.
Run Code Online (Sandbox Code Playgroud)+---------------------+-----------+ | Error | Aborts | +---------------------+-----------+ | NOT NULL violation. | Statement | +---------------------+-----------+我所说的这远远适用于XACT_ABORT为OFF时,这是默认值.当您发出SET XACT_ABORT ON时,大多数语句终止错误将成为批量中止错误
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |