【问题标题】:How do SQL Server table-valued functions report errors?SQL Server 表值函数如何报告错误?
【发布时间】:2011-07-02 07:54:47
【问题描述】:

当我查询一个作为表值函数实现的 SQL Server 2008 系统动态管理视图并返回一个空结果集时,我如何判断空结果集的原因是在函数,然后,那个错误是什么?

【问题讨论】:

  • 您是否有具体案例导致问题?
  • 您可以通过在存储过程中引发错误来测试这一点(尝试使用不同的错误级别,以查看有无 sql 异常的行为)。
  • 如果您列出函数名称以及您如何使用它,我们可能会说更多。你想达到什么目的?

标签: sql-server sql-server-2008


【解决方案1】:

他们没有。您不能在 T-SQL 函数中使用 THROW 或 RAISERROR。一些开发人员强制除以 0 以触发 UDF 内的错误。这很好用,但有时会让可怜的灵魂感到困惑,因为他们不得不调查显然不知从何而来的除以 0 错误。

【讨论】:

【解决方案2】:

在 TSQL 中,有一种比执行除以零更有用的方法来强制函数内部出错。我们公司所做的是转换一个字符串(描述问题所在)并将其转换为字符串。

if @PersonID is null
  insert into @Result values(@Right, cast('FT_AclGetAccess must never be called with @PersonID null' as int))

这将导致应用服务器出现如下错误:

转换 varchar 值 'FT_AclGetAccess 时转换失败 绝不能使用 @PersonID null' 调用数据类型 int。

在应用程序服务器上进行一些字符串操作,您会得到一个非常合理的日志文件错误消息! ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多