我继承了一个自SQL Server 6.5以来一直存在的数据库。它现在位于SQL Server 2014兼容模式下的SQL Server 2014框中。作为数据库初始分析的一部分,我发现了几个具有可为NULL列的表,这些表的默认约束值为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显然允许这样做,但我很难理解为什么存在这些默认值。有人能分享这种列定义的可能原理吗?
谢谢!
没有必要这样做,但明确添加它可以帮助向以后继承此代码的人(即您(表示,如果没有提供值,他们明确表示会有NULL。同样,这可能只是他们创建该脚本时使用的标准(可能是出于上述原因(。
如前所述,默认(NULL(约束将确定用户定义的值,因此在您的情况下,字段[cd_percent_cov]和[md_percent-cov]默认为NULL。
因此,一旦将约束修复为DEFAULT(NULL(,就不能提供任何数据否则错误将如下
消息515,级别16,状态2,第11行无法将值NULL插入表"tempdb.dbo.#teste"的列"profile_type_key"中_____________________________________________________________________________________________________________ 00000000 4F49;列不允许为null。INSERT失败。语句已终止。