了解 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))
(数字越小 = 优先级越高)
在int
和nvarchar
的情况下,优先级较高的是int
,这导致44237141916溢出。
我有一个 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))
(数字越小 = 优先级越高)
在int
和nvarchar
的情况下,优先级较高的是int
,这导致44237141916溢出。