Tsql 如何消除UDF中的错误?

Tsql 如何消除UDF中的错误?,tsql,error-handling,user-defined-functions,Tsql,Error Handling,User Defined Functions,我需要编写一个UDF,尝试将varchar强制转换为bigint,如果失败,则返回bigint或零。问题是-当字符串不是有效数字时,我找不到消除强制转换错误的方法。TRY CATCH在函数内部不起作用,我不知道还能做什么 试试这个: Create Function dbo.Convert2BigInt(@Data VarChar(100)) Returns BigInt As Begin Return(Case When IsNumeric(@Data + '.0e0') = 1

我需要编写一个UDF,尝试将varchar强制转换为bigint,如果失败,则返回bigint或零。问题是-当字符串不是有效数字时,我找不到消除强制转换错误的方法。TRY CATCH在函数内部不起作用,我不知道还能做什么

试试这个:

Create Function dbo.Convert2BigInt(@Data VarChar(100))
Returns BigInt
As 
Begin
    Return(Case When IsNumeric(@Data + '.0e0') = 1 
                Then Convert(BigInt, @Data)
                Else Convert(BigInt, 0)
                End)
End

它可以正常工作,不会出现任何错误,但是如果我通过“3uytutu”,它会返回3,这是不正确的。这很奇怪。当我使用相同的值“3uytutu”调用函数时,它返回0。我运行:Select dbo.Convert2BigInt('3uytutu')是否确保指定varchar参数的大小?在我的代码中,我使用了值100。如果您不使用该选项,SQL Server默认大小为1个字符,因此您的测试值被截断为一个字符,即“3”,可以安全地转换为一个大整数。是的,正是这样-我没有varchar的大小:)它可以工作,我接受您的答案。谢谢