この表を考えると
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]
空のテーブルに対して次のコードを実行すると、最初の挿入は成功しますが、コードが ID 列に重複する値を挿入しようとしているため、2 番目の挿入は失敗します。
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
PRIMARY KEY 制約 'PK_Table_2' の違反。オブジェクト 'dbo.Table_2' に重複するキーを挿入できません。
Insert 3
(1 row(s) affected)
エラーが発生した時点で実行をトッピングするスクリプトの代わりに、実行は次の挿入ステートメントで続行され、成功します。
エラーが発生したときにTRY CATCHブロックを使用してエラーをキャッチできることはわかっていますが、私の質問は次のとおりです。
エラーの重大度が 14 であることに気付きました。十分な重大度レベルのエラーが発生すると、実行が中止されると思います。これが正しいかどうか、およびスクリプトを中止させるために必要な最小重大度レベルを教えてください。