Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 创建表时标识不为NULL_Sql_Null_Identity - Fatal编程技术网

Sql 创建表时标识不为NULL

Sql 创建表时标识不为NULL,sql,null,identity,Sql,Null,Identity,有人能告诉我创建表时的指令IDENTITY NOT NULL是否冗余吗?我是说,从信息来看 默认值或NULL不允许作为显式标识值 我想说,任何声明为IDENTITY的列也隐式声明为notnull,但我想确定一下。有人能确认一下吗 非常感谢。SQL Server会自动向标识列添加NOTNULL约束,即使他在创建表时没有指定该约束 考虑下表脚本 create table test(id int identity(1,1), name varchar(1000)) 现在从ManagementStud

有人能告诉我创建表时的指令
IDENTITY NOT NULL
是否冗余吗?我是说,从信息来看

默认值或NULL不允许作为显式标识值

我想说,任何声明为
IDENTITY
的列也隐式声明为
notnull
,但我想确定一下。有人能确认一下吗


非常感谢。

SQL Server会自动向标识列添加NOTNULL约束,即使他在创建表时没有指定该约束

考虑下表脚本

create table test(id int identity(1,1), name varchar(1000))
现在从ManagementStudio生成表的脚本。它生成的脚本如下所示

CREATE TABLE [dbo].[test](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](1000) NULL
) ON [PRIMARY]
尽管默认情况下未在表脚本中指定NOT NULL约束,但会添加该约束。标识列永远不会为空。因此添加了NOTNULL约束。默认情况下,SQL Server(2008,可能还有更早的版本)将不允许您在NULL列上创建标识列。试试看:

CREATE TABLE Foo1
 (
   FooId  int  identity not null
  ,Data  varchar(20)  not null
 )
在哪里工作

CREATE TABLE Foo2
 (
   FooId  int  identity null
  ,Data  varchar(20)  not null
 )
生成错误消息
无法在表“Foo2”的可空列“FooId”上创建标识属性。

问题似乎是,“如果某件事是隐含的,那么是否明确宣布它是‘多余的’?”答案似乎是主观的。在包含
主键的列上声明
非NULL
是否冗余?如果
无操作
引用操作总是冗余的,为什么它会存在?如果不指定NULL或NOTNULL,SQL会将标识列设置为NOTNULL。我,我总是指定它,以避免出现
SET ANSI\u NULL\u DFLT\u OFF
SET ANSI\u NULL\u DFLT\u ON
命令特有的混乱。最终,你的答案暗示了NOT NULL是一种暗示。:)是的,我后来意识到了这一点,在@Pranay的帖子中添加了评论。我对编码的总体看法是总是避免使用“隐式代码”。永远不要假设SQL会做你认为它应该做的事情,而是要付出额外的努力(比如,键入“NOTNULL”)来明确你给计算机的方向。