将空字符串插入到SQL Server的INT列中

use*_*297 12 sql insert numeric sql-server-2008

SAMPLE表只有一列ID型的int,默认为空.

在我做Oracle的时候:

  insert into SAMPLE (ID) values ('');
Run Code Online (Sandbox Code Playgroud)

新记录添加空值.但是在SQL Server 2008中,当我运行相同的时候insert statement, the new record has the value of 0.

有没有办法强制SQL Server 2008将空字符串默认为NULL而不是0(对于数字类型的列)?

Mik*_*son 6

请改用NULL.

insert into SAMPLE (ID) values (NULL);
Run Code Online (Sandbox Code Playgroud)

  • 我不认为你可以在不修改代码的情况下做到这一点.我知道没有任何设置会使SQL Server将空字符串视为NULL. (4认同)

And*_*y M 6

假设您的INSERT语句是在应用程序的许多位置重用的存储过程的一部分(或者,可能是批处理总是由客户端代码的相同部分构造),并且插入的值是作为传递的数字传递的数字字符串参数,您可以像这样修改INSERT:

INSERT INTO SAMPLE (ID) VALUES (NULLIF(@argument, ''));
Run Code Online (Sandbox Code Playgroud)