可空列的NULL默认约束

时间:2018-11-09 19:35:28

标签: sql-server default-constraint

我继承了自SQL Server 6.5以来一直存在的数据库。现在,它位于SQL Server 2014兼容模式下的SQL Server 2014框上。作为对数据库的初始分析的一部分,我发现了几个带有可空列的表,这些表的默认约束值为NULL。表格脚本示例如下:

CREATE TABLE [dbo].[tester](
[tester_id int identity(1,1) not null primary key clustered,
[profile_type_key] [int] NOT NULL,
[reel_key] [int] NULL,
[product_key] [int] NULL,
[cd_percent_cov] [decimal](15, 4) NULL constraint DF_cd_percent_cov default (NULL),
[md_percent_cov] [decimal](15, 4) NULL constraint DF_md_percent_cov default (NULL))

SQL显然允许这样做,但是我很难理解为什么存在这些默认值。任何人都可以针对此类列定义共享可能的理由吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

不需要这样做,但是显式添加它可以帮助向以后继承此代码的人(即您)表示,如果没有提供任何值,则明确表示它们为NULL。同样,创建脚本时可能只是他们使用的标准(可能出于上述原因)。

答案 1 :(得分:0)

如前所述,默认(NULL)约束将确定用户定义的值是什么,因此在您的情况下,字段[cd_percent_cov]和[md_percent_cov]的默认值为NULL。

因此,一旦将约束修复为DEFAULT(NULL),就无法提供任何数据 否则错误将如下所示

515消息,第16级,州2,第11行 不能将值NULL插入表'tempdb.dbo的'profile_type_key'列中。#teste ________________________________________________________________________________________________________________ 000000004F49';列不允许为空。 INSERT失败。 该声明已终止。