sql - 如何报告 SQL Server 用户定义函数的错误

标签 sql sql-server tsql sql-server-2008 user-defined-functions

我正在 SQL Server 2008 中编写一个用户定义的函数。我知道函数不能以通常的方式引发错误 - 如果您尝试包含 RAISERROR 语句 SQL 返回:

Msg 443, Level 16, State 14, Procedure ..., Line ...
Invalid use of a side-effecting operator 'RAISERROR' within a function.

但事实是,该函数接受一些输入,这些输入可能无效,如果是无效的,则该函数无法返回任何有意义的值。那我该怎么办?

当然,我可以返回 NULL,但对于任何使用该函数的开发人员来说,解决此问题都很难。我还可能导致除以零或类似的结果 - 这会生成一条错误消息,但会产生误导性的消息。有什么办法可以以某种方式报告我自己的错误消息吗?

最佳答案

您可以使用 CAST 抛出有意义的错误:

create function dbo.throwError()
returns nvarchar(max)
as
begin
    return cast('Error happened here.' as int);
end

然后Sql Server会显示一些帮助信息:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Error happened here.' to data type int.

关于sql - 如何报告 SQL Server 用户定义函数的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1485034/

相关文章:

SQL Server : round decimal number and convert to int (within Select)

MySQL 搜索一个字段但删除所有非数字字符

c# - 是否需要 "BEGIN TRAN"才能获得正确的 SCOPE_IDENTITY?

SQL 脚本的正则表达式前瞻/后视匹配

mysql - 如果不存在则不工作

MYSQL 在单个查询中选择电影和投票平均值

sql-server - 根据行顺序获取计数

c# - SQL 查询正在复制行并在我的聚合函数中使用这些行

sql-server - 在 where 子句中加倍 %%?

sql - 如何从一个 SELECT 语句插入多个表