表创建时IDENTITY NOT NULL

时间:2011-06-01 11:36:19

标签: sql null identity

有人可以告诉我创建表格时的IDENTITY NOT NULL指令是否多余?我的意思是,根据消息判断

不允许使用DEFAULT或NULL作为显式标识值。

我会说声明为IDENTITY的任何列都隐式声明为NOT NULL,但我想确定一下。有人可以确认一下吗?

非常感谢。

2 个答案:

答案 0 :(得分:9)

SQL Server会自动为标识列添加NOT NULL约束,尽管在创建表时没有对其进行说明

考虑以下表格脚本

create table test(id int identity(1,1), name varchar(1000))

现在从Management Studio生成表的脚本。它生成脚本为

CREATE TABLE [dbo].[test](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](1000) NULL
) ON [PRIMARY]

尽管默认情况下已添加,但表脚本中未指定NOT NULL约束。标识列永远不会为NULL。因此,默认情况下添加NOT NULL约束

答案 1 :(得分:1)

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
 )

生成错误消息Could not create IDENTITY attribute on nullable column 'FooId', table 'Foo2'.