2011-02-22 45 views
1

当我询问这是为表值函数执行的SQL Server 2008的系统动态管理视图,并返回一个空的结果集,我怎么能告诉,对于查询结果为空的原因是,在函数中发生错误,然后,那个错误是什么?SQL Server表值函数如何报告错误?

+0

你有一个特定的情况下造成的问题吗? – JNK 2011-02-22 21:26:46

+0

您可以通过存储过程中的错误,提高测试这个(尝试用不同的错误水平,看与不SQL异常行为)。 – Oded 2011-02-22 21:27:45

+0

如果列出函数名称以及如何使用它,我们可能会说更多。你想达到什么目的? – 2011-02-22 21:30:12

回答

3

他们不知道。您不能在T-SQL函数中使用THROW或RAISERROR。有些开发人员强制用0除以在UDF内引发错误。这样做很好,但有时会混淆可怜的灵魂,这个灵魂必须调查一个明显来自无处的0错误。

+0

我站好了。人们不能从函数中提出错误。 – 2011-02-23 09:46:47

+0

有趣的是,两个截然相反的答案都是upvoted。对于其他人看,有一些更详细的在这里:http://stackoverflow.com/questions/1485034/how-to-report-an-error-from-a-sql-server-user-defined-function。 – 2011-03-09 07:13:53

2

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

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

这将导致应用程序服务器看起来像这样的错误:转换VARCHAR值时,数据类型为int“FT_AclGetAccess 绝不能@PersonID空被称为”

转换失败。

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