IDENTITY НЕ NULL при создании таблицы - PullRequest
13 голосов
/ 01 июня 2011

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 01 июня 2011

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

Рассмотрим следующий скрипт таблицы

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

Теперь сгенерируйте сценарий таблицыот студии управления.Он генерирует сценарий как

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

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

1 голос
/ 01 июня 2011

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

...