默认情况下如何将表列设置为可空

时间:2016-02-15 09:40:13

标签: sql-server

我正在使用AWS RDS Microsoft SQL Server 2014 - 12.0.4422.0(X64) 试图创建测试表。

create table t1(id int not null, s varchar) on [primary]

s列不可归零。

SELECT COLUMN_NAME, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 't1'

COLUMN_NAME IS_NULLABLE
id  NO
s   NO
(2 rows affected)

我预计s将为IS_NULLABLE = yes,因为not null未明确设置。
所以现在唯一一种将s设置为NULLABLE的方法我必须使用

create table t1(id int not null, s varchar null) on [primary]

所以可能有问题是如果没有明确地将列设置为NOT NULL,如何强制SLQ将任何列设置为NULLABLE?

1 个答案:

答案 0 :(得分:1)

这可以通过使用SET ANSI_NULL_DFLT_ON tsql命令来实现:

SET ANSI_NULL_DFLT_ON ON;
GO
create table t1(id int not null, s varchar) on [primary]
GO 
-- NULL insert should succeed.
INSERT INTO t1 (id, s) VALUES (1, NULL);

请注意,要使其正常工作,SET ANSI_DEFAULTS应设置为关闭。

就我个人而言,我认为无论如何都不会信任默认行为,因为您永远不知道您团队的其他成员是否已更改过它。
因此,我建议为所有内容设置显式值,包括NULL / NOT NULL选项。