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