IDENTITY NOT NULL при создании таблицы

Может ли кто-нибудь сказать мне, является ли команда IDENTITY NOT NULL при создании таблицы избыточной или нет? Я имею в виду, судя по сообщению

DEFAULT или NULL не допускаются как явные значения идентификаторов.

Я бы сказал, что любой столбец, объявленный как IDENTITY, неявно также объявляется как NOT NULL, но я хотел бы убедиться. Кто-нибудь может подтвердить?

Большое спасибо.

Ответ 1

SQL Server автоматически добавляет ограничение NOT NULL к столбцам идентификаторов, хотя он не объяснял это при создании таблицы

Рассмотрим следующую таблицу script

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

Теперь создайте script таблицы из Management Studio. Он генерирует script как

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

Несмотря на то, что ограничение NOT NULL не указано в таблице script по умолчанию, оно добавляется. Столбец идентификатора никогда не будет NULL. Таким образом, ограничение NOT NULL добавляется по умолчанию

Ответ 2

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'.