gpt4 book ai didi

sql - 为什么 int 列值在传递为空时默认为 '0'?

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:36 27 4
gpt4 key购买 nike

我有一个包含整数列的表。

CREATE TABLE [dbo].[tble1](
[id] [int] NOT NULL,
[test] [nchar](10) NULL
)

当我尝试插入一些值并将空字符串传递给 id 列时,如下所示,它被插入并且 id 列的值默认为 0。

INSERT INTO [dbo].[tble1]
([id],[test])
VALUES
('','a')

我找不到任何令人满意的理由。有人可以分享您对此的看法吗?

最佳答案

发生的事情是 '' 被转换为整数。规则是可以根据字符串中的数字字符转换字符串。

如果字符串为空,则将其转换为 0。

因此,转换发生在非常“顶级”的级别。类型不匹配,因此 SQL Server 尝试隐式转换。

不幸的是,documentation 在这个主题上并不清楚:

Character expressions that are being converted to an exact numeric data type must consist of digits, a decimal point, and an optional plus (+) or minus (-). Leading blanks are ignored. Comma separators, such as the thousands separator in 123,456.00, are not allowed in the string.

老实说,我会将“必须由数字组成”解释为必须至少有一个数字(尽管从技术上讲,“零”在英语中被视为复数,但我不一定将复数视为包括零元素)。然而,空字符串已被用作 - 几乎永远 - 作为广泛数据库中任何类型的有效值。

关于sql - 为什么 int 列值在传递为空时默认为 '0'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43068948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com