从SQL Server 2005中的用户自定义函数中“捕捉”错误
我有一个函数,它将一个数字作为输入并将其转换为日期。这个数字不是任何标准形式的日期数字,所以我必须手动将数字的一部分细分为各个日期部分,将日期部分转换为varchar字符串,然后将字符串连接并将其转换为新的日期时间对象。从SQL Server 2005中的用户自定义函数中“捕捉”错误
我的问题是我如何捕捉铸造失败并从我的函数返回null或低范围值?我宁愿让我的函数“被动”失败,返回一个默认值,而不是将失败代码返回给我的存储过程。 TRY/CATCH语句显然不能在函数内工作(除非有某种类型的定义标志我不知道),并尝试使用标准'@@ Error <> 0'方法也不起作用。
顺便说一句,这听起来像它可能是一个标量UDF。 Alex的博客指出,这是一场性能灾难。 http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/05/23/reuse-your-code-with-cross-apply.aspx
SELECT CASE WHEN ISDATE(@yourParameter) = 1
THEN CAST(@yourParameter AS DATETIME)
ELSE YourDefaultValue
END
没有RLH说这个号码没有任何标准的日期形式?我不认为ISDATE在这种情况下会起作用。 – wcm 2011-03-18 17:31:24
由于格式是非标准的,因此在我听起来像你在铸造之前一直在做所有的验证。确保个别部分是数字,检查月份是否在1到12之间,确保它不是2月30日等。如果有任何失败,则不返回任何内容。
有趣的链接。我并不知道APPLY条款。 – wcm 2011-03-18 17:30:11