Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 可为NULL的列上的NULL默认约束_Sql Server_Default Constraint - Fatal编程技术网

Sql server 可为NULL的列上的NULL默认约束

Sql server 可为NULL的列上的NULL默认约束,sql-server,default-constraint,Sql Server,Default Constraint,我继承了一个自SQLServer6.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 NUL

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


谢谢

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

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

如您所述,默认(NULL)约束将确定用户定义的值,因此在您的情况下,字段[cd_%cov]和[md_%cov]的默认值为NULL

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

Msg 515,16级,状态2,第11行 无法将该值的零值插入无法插入的值,无法将该值的零值插入到列“概要”型“类型”型“关键”型“波形”型“文件”型“文件”型“类型”型“文件”型“文件”型“文件”型“类型”型“类型”型“类型”型“关键”,表“临时”表“temdb.dbo.dbo..\\\埃埃埃埃埃埃格格格\uuuuuuuuuUUUUUUUU\\\\\\\uuuuuuuuuuuuuuuuuuuuuuuuuuu\\\\\\\\\\\ uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu0000000 4F49';列不允许空值。插入失败。
语句已终止。

如您所述,默认(NULL)约束将确定用户定义的值,因此在您的情况下,字段[cd_百分比\u cov]和[md_百分比\u cov]的默认值为NULL

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

Msg 515,16级,状态2,第11行 无法将该值的零值插入无法插入的值,无法将该值的零值插入到列“概要”型“类型”型“关键”型“波形”型“文件”型“文件”型“类型”型“文件”型“文件”型“文件”型“类型”型“类型”型“类型”型“关键”,表“临时”表“temdb.dbo.dbo..\\\埃埃埃埃埃埃格格格\uuuuuuuuuUUUUUUUU\\\\\\\uuuuuuuuuuuuuuuuuuuuuuuuuuu\\\\\\\\\\\ uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu0000000 4F49';列不允许空值。插入失败。 声明已终止