Using Change Data上的Microsoft联机丛书(BOL)解释了cdc.fn_cdc_get_all_changes_*
&的错误消息。 cdc.fn_cdc_get_net_changes_*
当一个无效的超出范围的LSN(日志序列号)传递给它们时。{/ p>
Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function `cdc.fn_cdc_get_all_changes_` ...
Msg 313, Level 16, State 3, Line 1
An insufficient number of arguments were supplied for the procedure or function `cdc.fn_cdc_get_net_changes_` ...
他们对这个误导性错误消息的解释如下:
注意: 人们认识到了这一点 Msg 313的消息具有误导性 没有传达实际的原因 失败。这种尴尬的用法源于此 从无法提出一个 TVF中的显式错误。 尽管如此,返回的价值仍然存在 可识别的,如果不准确,则错误 被认为比简单回归更可取 一个空的结果。空结果集 不会与a区别开来 有效查询不返回任何更改。
以下是该笔记的含义RAISERROR
有时候我想抛出一个错误,你不能在UDF中使用TRY..CATCH
,因为它也有像RAISERROR
那样的副作用。
现在问题是,你如何解决这个问题?
我相信你以前遇到过这个限制。
你会建议什么选择?
[更新] 我们假设您被迫使用UDF
。
答案 0 :(得分:2)
如果你的函数返回BIT,我会将NULL返回给调用代码,并且在使用函数检查NULL之后的某个时刻,然后抛出一个错误。