我们的一位客户希望在违反 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() 。然而,这感觉像是做错了事。
谢谢!
桑德