Cha*_*son 5 error-handling sql-server-2005 function sql-server-2000 type-conversion
这个问题可以很容易地采取多种途径,因此我将首先尝试更具体的路径.在使用SQL Server 2005时,我正在尝试创建一个标量函数,它充当从varchar到int的'TryCast'.我遇到问题的地方是我在函数中添加一个TRY块;
CREATE FUNCTION u_TryCastInt
(
@Value as VARCHAR(MAX)
)
RETURNS Int
AS
BEGIN
DECLARE @Output AS Int
BEGIN TRY
SET @Output = CONVERT(Int, @Value)
END TRY
BEGIN CATCH
SET @Output = 0
END CATCH
RETURN @Output
END
Run Code Online (Sandbox Code Playgroud)
事实证明这一陈述存在各种错误,包括"在函数中'开始尝试'中无效使用副作用或时间相关运算符"和"在'END TRY'中无效使用副作用或时间相关运算符'在一个功能中".我似乎无法找到在标量函数中使用try语句的任何示例,这让我想到,函数中的错误处理是否可行?
这里的目标是创建一个强大的Convert或Cast函数版本,以允许SELECT语句执行depsite转换错误.例如,采取以下措施;
CREATE TABLE tblTest
(
f1 VARCHAR(50)
)
GO
INSERT INTO tblTest(f1) VALUES('1')
INSERT INTO tblTest(f1) VALUES('2')
INSERT INTO tblTest(f1) VALUES('3')
INSERT INTO tblTest(f1) VALUES('f')
INSERT INTO tblTest(f1) VALUES('5')
INSERT INTO tblTest(f1) VALUES('1.1')
SELECT CONVERT(int,f1) AS f1_num FROM tblTest
DROP TABLE tblTest
Run Code Online (Sandbox Code Playgroud)
它永远不会达到丢弃表的程度,因为在尝试将'f'转换为整数时执行会挂起.我希望能够做到这样的事情;
SELECT u_TryCastInt(f1) AS f1_num FROM tblTest
fi_num
__________
1
2
3
0
5
0
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?有什么存在可以解决这个问题吗?另外,我想尝试扩展对话以支持SQL Server 2000,因为在这种情况下Try块不是一个选项.