SQL Server でエラーを処理するために try...catch 命令を使用しています。デフォルトのシステム エラー メッセージの代わりに独自のメッセージを表示できるように、オブジェクト (エラーに直面したフィールドのコードなど) を認識する必要があります。 .
これが私のストアドプロシージャです:
USE [ArbitraryDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[CTInsert_UserSkills]
(
@UserID_int int, @SkillSN_int int, @Ordering_tinyint tinyint,
@SkillLevelSN_tinyint tinyint, @SkillYearcount_tinyint tinyint
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ErrorMessage varchar(200), @ErrorCode int
BEGIN TRY
INSERT INTO CT_UserSkills (UserID_int, SkillSN_int, Ordering_tinyint,
SkillLevelSN_tinyint, SkillYearcount_tinyint)
VALUES (@UserID_int, @SkillSN_int, @Ordering_tinyint, @SkillLevelSN_tinyint,
@SkillYearcount_tinyint)
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
END CATCH
END
出力は次のとおりです。
Cannot insert duplicate key row in object 'dbo.CT_UserSkills' with unique index 'IX_CT_UserSkills'. The duplicate key value is (4, 1).
しかし、実際には、sysmessages でコード 2601 を含む以下のエラー メッセージのパターンで '%.*ls' を探しています。
Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'.
The duplicate key value is %ls.
それ ('%.*ls') を見つける方法を教えてください。