鉴于此表
CREATE TABLE [dbo].[Table_2](
[X] [int] IDENTITY(1,1) NOT NULL,
[Y] [varchar](30) NULL,
CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED
(
[X] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
当我对空表运行以下代码时,第一个插入成功,但第二个插入将失败,因为代码正在尝试为标识列插入重复值。
BEGIN
SET IDENTITY_INSERT Table_2 ON
PRINT 'Insert 1'
INSERT INTO Table_2
(X, Y)
VALUES (3, CAST(getdate() AS varchar(30)) )
PRINT 'Insert 2'
INSERT INTO Table_2
(X, Y)
VALUES (3, CAST(getdate() AS varchar(30)) )
PRINT 'Insert 3'
INSERT INTO Table_2
(X, Y)
VALUES (4, CAST(getdate() AS varchar(30)) )
SET IDENTITY_INSERT Table_2 OFF
END
输出:
Insert 1
(1 row(s) affected)
Insert 2
消息 2627,级别 14,状态 1,第 13 行
违反主键约束“PK_Table_2”。无法在对象“dbo.Table_2”中插入重复键。
Insert 3
(1 row(s) affected)
不是在遇到错误的地方执行脚本,而是继续执行下一个插入语句,该语句成功。
我意识到我可以在错误发生时使用 TRY CATCH 块来捕获错误,但我的问题是:
我注意到错误的严重性为 14。我假设严重级别足够的错误会导致执行中止。你能告诉我这是否是 corerct 以及导致脚本中止需要什么最低严重性级别?