在ANSI SQL中的CREATE TABLE语句中创建命名列缺省值

时间:2011-10-26 21:47:23

标签: sql ansi-sql

我希望以符合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'附近的语法不正确。

2 个答案:

答案 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)
)