我遇到了一个有趣的存储过程,我需要你的帮助来解决这个问题。
基本上,存储过程 SELECT
与WHERE
条件,其中条件是:
WHERE SomeType = 2
SomeType
是 char(3)
列,其中包含类似 '1','2','AA','AB'
的值等等
当我在 SSMS 中运行存储过程时,它失败并显示:
Msg 245, Level 16, State 1, Line 1
Syntax error converting the varchar value 'AA' to a column of data type int.
但是,当我通过生产中的应用程序使用该存储过程时,它会毫无问题地返回数据。
我的问题是,这怎么可能?
最佳答案
您在评论中说您还有其他 WHERE
子句未显示。
问题可能是不同的执行计划。例如假设您的真实 WHERE
条件是
WHERE SomeType = 2 AND Foo = 'X'
您的数据是
SomeType Foo
-------- ----
1 X
2 X
AA Y
AB Y
然后在一个实例中,它可能会评估 Foo = 'X' 首先留下行
SomeType Foo
-------- ----
1 X
2 X
然后,它对这些已过滤的行运行 IMPLICIT_CAST(SomeType AS INT) = 2
条件,没有任何问题。
但是,如果顺序相反,首先评估 SomeType = 2
条件,则需要转换值 AA
和 AB
> 为 int
,查询将失败。
关于sql-server - SQL Server 2005 - 比较 char 列与 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204351/