sql-server - SQL Server 2005 - 比较 char 列与 int

标签 sql-server tsql debugging sqldatatypes

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

基本上,存储过程 SELECTWHERE条件,其中条件是:

WHERE SomeType = 2

SomeTypechar(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 条件,则需要转换值 AAAB > 为 int ,查询将失败。

关于sql-server - SQL Server 2005 - 比较 char 列与 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204351/

相关文章:

sql - 我无法启用 sa 帐户

sql - 使用存储过程借方贷方

sql - 查找 SQL 中多列中出现次数最多的情况

c++ - 远程嵌入式设备上带有核心文件的 GDB - 如何获取有关回溯的更多信息?

c++ - linux上c++的GUI调试器

c++ - 按偏移量查找成员

sql-server - sql server FOR XML 有字符限制吗?

sql-server - 我想编写一个通用存储过程来将数据插入数据库的任何表中

sql - 在 SQL Server 中生成排列的最优雅方式

SQL 年度总和报告,寻找优雅的解决方案