我有以下问题。
当我在DataBase1中运行查询时..
declare @x float
select @x = Descripcion from Automotor.Modelo
where id = 57
select @x
结果是“1,7E + 27”
但我在DataBase2中运行查询..
结果是 “Msg 8114,Level 16,State 5,Line 2 将数据类型varchar转换为float时出错。“
结构是一样的,知道为什么会发生这种情况?
答案 0 :(得分:0)
一个数据库中的表可能包含不在另一个数据库中的字符数据,并且在过滤器之前尝试进行分配(或至少验证赋值操作)。由于其他原因,甚至可能使用相同的数据但不同的索引,不同的统计信息或不同的查询计划,这可能意味着SQL Server以不同的顺序查看数据并遇到错误的值。但我猜想即使结构相同,数据也不是。
我的建议是:
(a)将浮动数据存储在浮点列而不是varchar列(首选)
(b)将分配问题短路如下:
SELECT @x = CASE WHEN Descripcion NOT LIKE '%[^0-9.]%' THEN Descripcion END
FROM Automator.Modelo WHERE id = 57;