我希望以符合ANSI的方式创建一个命名的默认值,如果可能,在CREATE TABLE语句中
如果我尝试添加CONSTRAINT,因为我通常会在ALTER TABLE语句中编写它,它会失败(至少在SQL SERVER中,但我强调我希望找到ANSI投诉声明,因为我希望它能够工作通过各种Ado.NET DbConnections)。
示例:
CREATE TABLE [dbo].[MyExample]
(
Id int NOT NULL IDENTITY (1, 1),
Name varchar(512) NOT NULL,
IsActive bit NOT NULL,
CONSTRAINT PK_MyExample PRIMARY KEY CLUSTERED (Id),
CONSTRAINT DF_MyExample_IsActive DEFAULT (1) FOR [IsActive]
)
错误:
'for'附近的语法不正确。
答案 0 :(得分:4)
就SQL-92标准而言 - 既是ISO(I =国际)又是ANSI(A +美国),顺便说一下 - DEFAULT
不是可以给出名字的约束。在SQL-92中,DEFAULT
只能与列定义内联定义,并且必须介于数据类型和NOT NULL
之间(如果使用的话),例如:
CREATE TABLE T (c INTEGER DEFAULT 1 NOT NULL UNIQUE);
请注意,您的小示例中包含许多非标准语法:
bit
null行为不正确)int
而不是INTEGER
)IDENTITY
CLUSTERED
答案 1 :(得分:1)
它不符合ANSI吗?
CREATE TABLE [dbo].[MyExample]
(
Id int NOT NULL IDENTITY (1, 1),
Name varchar(512) NOT NULL,
IsActive bit NOT NULL CONSTRAINT DF_MyExample_IsActive DEFAULT (1),
CONSTRAINT PK_MyExample PRIMARY KEY CLUSTERED (Id)
)