我正在调试一个大量使用 t-sql 存储过程的 java 应用程序。有时我会收到帖子的标题错误。我想我已经找到了错误发生的地方,但是 T-SQL 不在我的技能范围之内。有人可以确认我是对的并提出解决方案吗?
SQL Server 2005 堆栈跟踪显示以下消息:
set @prezzoUnitario2f = funcCtrlConvertToFloat] (@prezzoUnitario2)
IF @prezzoUnitario2f IS NULL OR cast(@prezzoUnitario2f as varchar) = '' OR @prezzoUnitario2f < 0
SET @defaultValue = NULL
IF ((select ISNUMERIC(@valueIn)) = 1)
错误:8114,严重性:16,状态:5
将数据类型 varchar 转换为浮点数时出错。
这是存储过程调用funcCtrlConvertToFloat
函数的地方:
set @prezzoUnitario2f = [C4].[dbo].[funcCtrlConvertToFloat] (@prezzoUnitario2) --CONVERT(float,replace(@prezzoUnitario2,',','.'))
这是funcCtrlConvertToFloat
功能:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[funcCtrlConvertToFloat]
(
@valueIn varchar(100)
)
RETURNS float
AS
BEGIN
DECLARE @defaultValue float
DECLARE @returnValue float
SET @defaultValue = NULL
--SET @valueIn = ISNULL(@valueIn, 0)
IF ((select ISNUMERIC(@valueIn)) = 1)
BEGIN
SET @returnValue = CONVERT(float,replace(@valueIn ,',','.'))
END
ELSE
BEGIN
SET @returnValue = @defaultValue
END
RETURN @returnValue
END
正如我所说,我不是 T-SQL 程序员,所以任何提示将不胜感激