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

Jim*_*ood 2 sql-server sql-server-2008

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

Sil*_*ust 8

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

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

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

将 varchar 值 'FT_AclGetAccess must never be called with @PersonID null' 转换为数据类型 int 时转换失败。

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


Rem*_*anu 5

他们没有.您不能在T-SQL函数中使用THROW或RAISERROR.某些开发人员强制除以0以在UDF内触发错误.这种方法很好,但有时会混淆那些必须调查除以0错误的可怜的灵魂.