了解 SQL 服务器 Int 数据类型

Understanding SQL Server Int Data Types

我有一个 table,其中有一列名为 PtObjId,数据类型为 INT

根据我的理解,查看位于 Microsoft Documentation 的线程。我最多只能存储 +/- 2,147,483,647

的值

如果我运行这个查询:

Select top 100 *
from [table]
where [PtObjId] IN (44237141916)

应该不会报错吧?

为什么这个查询会出现下面的错误:

select top 100 *
from [table]
where [PtObjID] IN ('44237141916')

但是top查询没有出错?

sqlshack-article 详细解释了 SQL-Server 中的隐式转换。

必须为比较隐式转换一个值。文字 44237141916 被视为 decimal,其优先级高于 int,因此另一个操作数被转换为 decimal.

文章中给出了完整的优先级列表(以及 table 可能的转换),摘录:

10. float
11. real
12. decimal
13. money
14. smallmoney
15. bigint
16. int
17. smallint
18. tinyint 
...
25. nvarchar (including nvarchar(max))

(数字越小 = 优先级越高)

intnvarchar的情况下,优先级较高的是int,这导致44237141916溢出。