SQL Server 2005 - 将char列与int进行比较

时间:2012-04-18 06:54:36

标签: sql-server tsql debugging sqldatatypes

我遇到了一个有趣的存储过程,我需要你的帮助来解决这个问题。

基本上,条件为SELECT条件的存储过程WHERE

WHERE SomeType = 2

SomeTypechar(3)列,其中包含'1','2','AA','AB'等值。

当我在SSMS中运行存储过程时,它失败并显示:

  

Msg 245,Level 16,State 1,Line 1
  语法错误将varchar值'AA'转换为数据类型为int的列。

但是,当我通过Production中的应用程序使用该存储过程时,它会毫无问题地返回数据。

我的问题是,这怎么可能?

3 个答案:

答案 0 :(得分:2)

应用可能正在使用不同的参数调用SP,因此永远不会执行错误的代码。或者应用程序可能只是忽略错误。

答案 1 :(得分:2)

您在评论中说您还没有显示其他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条件,则需要将值AAAB转换为int,查询将失败。

答案 2 :(得分:0)

int转换为Char,我认为它会正常工作。