我有一个整数列的表。
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并不是很清楚这个话题:
正在转换为精确数字的字符表达式
数据类型必须由数字、小数点和可选的
加号(+)或减号(-)。前导空格被忽略。逗号分隔符,
例如123456.00中的千位分隔符,在
字符串。
老实说,我会将“必须由数字组成”解释为必须至少有一个数字(尽管在英语中,“零”在技术上被视为复数,但我不一定认为复数包括零元素)。然而,空字符串已经被用作(几乎是永久的)一个有效值,可用于广泛的数据库中的任何类型。
关于sql - 当传递空值时,为什么int列值默认为'0'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43068948/