クライアントの 1 人は、UNIQUE KEY 違反時のカスタム エラー メッセージを望んでいます。
次のシナリオを考えます。
CREATE TABLE [dbo].[Pip]
(
id int IDENTITY(1,1) NOT NULL,
code NVARCHAR(50) NOT NULL,
CONSTRAINT [PK_Pip] PRIMARY KEY ([id]),
CONSTRAINT [UQ_Pip_Code] UNIQUE([code]),
)
BEGIN TRY
INSERT INTO Pip(code) VALUES('TEST')
INSERT INTO Pip(code) VALUES('TEST')
END TRY
BEGIN CATCH
DECLARE @error INT, @message VARCHAR(4000), @xstate INT;
SELECT @error = ERROR_NUMBER(), @message = ERROR_MESSAGE(), @xstate = XACT_STATE();
IF @errorNumber = 2627 OR @errorNumber = 2601 BEGIN
RAISERROR('<custom unique key violation error message>', 16, 1)
END
END CATCH
必要なのは、定義された一意のキーごとにエラー メッセージを指定できるように、CATCH セクションで違反している一意のキーの名前です。
もちろん、このテーブルにアクセスするさまざまなストアド プロシージャに手動でチェックを追加することもできますが、これではコードの保守性が低下するため、これは望ましいことではありません。
SQL Server (2008R2) でそのような可能性はありますか?
sys.messages-table に基づいて、ある種の正規表現で ERROR_MESSAGE() を解析することを考えました。しかし、これは間違ったことのように感じます。
ありがとう!
サンダー