我想在SQL Server 2005中编写一个非CLR用户定义函数。该函数接受一个输入字符串并返回一个输出字符串。如果输入字符串无效,那么我想向调用者指出错误。
我的第一个想法是使用RAISERROR引发异常。但是,SQL Server不允许在UDF中使用它(尽管可以在基于CLR的UDF中引发异常,如图所示)。
如果输入值出错,我的最后一种方法是从函数返回NULL(或其他一些错误指示符值)。但是,我不喜欢这个选项,因为它:
是否有任何调用者友好的方法来暂停SQL Server中的错误函数?
答案 0 :(得分:7)
似乎SQL Server UDF在这个(以及许多其他方式)方面有点受限。
你真的无法做很多事情 - 那就是(现在)只是它的方式。要么你可以定义你的UDF,以便你可以通过它的返回值发出错误信号(例如,在出现错误时返回NULL),或者你几乎不得不求助于编写存储过程,这可能有更多错误处理并允许RAISERROR等。
因此,要么将UDF设计为不需要特定的错误条件信号,要么必须重新设计使用存储过程的方法(可以有多个OUTPUT参数,因此也可以返回错误代码和数据有效负载) ,如果你需要),或管理你的UDF的CLR代码。
抱歉,我没有更好的主意 - 现在,我担心,这些都是你的选择 - 接受你的选择。
马克
答案 1 :(得分:1)
基于这个想法,在回答重复问题here时给出了一个可能的解决方案:
return cast('Error message here.' as int);
这会引发这样的事情:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'Error message here.' to data type int.
它适用于标量值的UDF,但不适用于表值的UDF。