SQL Server表值函数如何报告错误?

3

当我查询一个作为表值函数实现的SQL Server 2008系统动态管理视图时,如果返回一个空结果集,我该如何确定为空结果集的原因是函数中出现了错误,并且该错误是什么?


你是否有一个特定的案例导致了问题? - JNK
您可以通过在存储过程中引发错误来进行测试(尝试使用不同的错误级别,以查看是否存在SQL异常的行为)。 - Oded
如果您列出函数名称以及如何使用它,我们可能会提供更多的信息。你想要实现什么目标? - Sir Wobin
2个回答

8

在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 must never be called with @PersonID null' 转换为数据类型 int 时转换失败。”
对应用程序服务器进行一些字符串操作,就可以得到一个相当合理的日志文件错误消息!;-)

6

他们不行。在T-SQL函数中,您不能使用THROW或RAISERROR。一些开发人员会强制在UDF内部触发一个除以0的错误来引发错误。这样做可以正常工作,但有时会让调查明显无从而起的除以0错误的可怜灵魂感到困惑。


1
有趣的是两个截然相反的答案都被点赞了。对于其他寻找答案的人,这里有更多细节:https://dev59.com/fXM_5IYBdhLWcg3wMgAF。 - Jim Flood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接