0

我继承了一个自 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 显然允许这样做,但我很难理解为什么这些默认值存在。任何人都可以分享此类列定义的可能理由吗?

谢谢!

4

2 回答 2

2

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

于 2018-11-09T19:42:41.913 回答
0

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

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

消息 515,级别 16,状态 2,第 11 行无法将值 NULL 插入列 'profile_type_key',表 'tempdb.dbo.#teste_____________________________________________________________________________________________________________000000004F49';列不允许空值。插入失败。该语句已终止。

于 2018-11-09T20:13:26.280 回答