请问在创建表时使用IDENTITY NOT NULL
指令是否多余?我的意思是,根据消息提示“DEFAULT或NULL不能作为明确的标识值”,我认为声明为IDENTITY
的任何列也隐含地声明为NOT NULL
,但我想确认一下。请有经验的人士确认一下,非常感谢。
尽管在创建表时没有指定,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]
尽管在表脚本中没有指定NOT NULL约束,但默认情况下它会被添加。标识列永远不会为NULL。因此,默认情况下会添加NOT NULL约束。
SET ANSI_NULL_DFLT_OFF
和SET ANSI_NULL_DFLT_ON
命令所固有的混淆。 - Philip KelleySQL 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
)
生成错误信息:无法在可空列'FooId',表'Foo2'上创建IDENTITY属性。
PRIMARY KEY
组成的列上声明NOT NULL
是否多余?如果NO ACTION
引用操作总是多余的,为什么它还存在? - onedaywhen