Sql Server中隐式转换

时间:2014-01-02 17:03:02

标签: sql-server-2008

我有以下问题。

当我在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时出错。“

结构是一样的,知道为什么会发生这种情况?

1 个答案:

答案 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;