【问题标题】:How to custom error message when rule check occurred ? T-SQL发生规则检查时如何自定义错误消息? T-SQL
【发布时间】:2017-06-16 09:29:34
【问题描述】:

在 SQL Server 2016 中。 我创建了一个具有绑定规则的用户定义数据类型的列。 T-SQL 脚本如:

CREATE RULE [dbo].[R_typeYesNo]
    AS @column IN ('Y', 'N')
GO

CREATE TYPE [dbo].[typeYesNo]
    FROM VARCHAR (1) NULL
GO

EXECUTE sp_bindrule [R_typeYesNo], [typeYesNo]
GO

CREATE TABLE dbo.MyRuleTable (
    ID                   int                  identity,
    ACTIVEYN             [dbo].[typeYesNo]     NULL,
    CONSTRAINT [PK_MyRuleTable] PRIMARY KEY CLUSTERED ([ID] ASC)
)
GO

INSERT INTO dbo.MyRuleTable(ACTIVEYN)
VALUES('A')
GO

-- Exception here 

DROP TABLE dbo.MyRuleTable;
DROP TYPE [dbo].[typeYesNo];
DROP RULE [dbo].[R_typeYesNo];
GO

当插入错误值时,规则检查会返回异常信息:

消息 513,级别 16,状态 0,行 20 A 列插入或更新 与先前的 CREATE RULE 语句强加的规则冲突。这 声明被终止。数据库“DB1”中发生冲突, 表“dbo.MyRuleTable”,列“ACTIVEYN”。

可以,可以自定义留言吗?

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    为您的规则创建自定义错误消息

    EXEC sp_addmessage
    500021,
    10,
    'This is a custom error message for MyRule'
    

    并在 CATCH 块中使用 RAISERRORTHROW

    BEGIN try
         -- Exception here 
    END try
    BEGIN catch
        IF Error_message() LIKE '%MyRuleTable%'
          BEGIN
              RAISERROR (500021,10,1)
          END
        ELSE 
           BEGIN
               DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE();
               DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
               DECLARE @ErrorState INT = ERROR_STATE();
    
               RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
           END
    END catch 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 2018-04-30
      • 2021-10-09
      相关资源
      最近更新 更多