在ANSI SQL的CREATE TABLE语句中创建默认的命名列

joh*_*hnc 2 sql ansi-sql

我想在CREATE TABLE语句中以符合ANSI的方式创建命名默认值

如果我尝试像往常那样在ALTER TABLE语句中添加CONSTRAINT,它将失败(至少在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]
)
Run Code Online (Sandbox Code Playgroud)

错误:

“ for”附近的语法不正确。

one*_*hen 5

顺便说一下,就SQL-92标准而言,它既是ISO(I =国际),又是ANSI(A + American),但DEFAULT它并不是一个可以赋予名称的约束。在SQL-92中,DEFAULT只能与列定义一起内联定义,并且必须在数据类型和NOT NULL(如果使用)之间(例如,使用)

CREATE TABLE T (c INTEGER DEFAULT 1 NOT NULL UNIQUE);
Run Code Online (Sandbox Code Playgroud)

请注意,在您的小示例中,您有很多非标准语法:

  • 方括号作为带引号的标识符(应为双引号)
  • 不兼容的数据类型(例如,错误的bit空行为)
  • 缩写的数据类型(例如int而不是INTEGER
  • IDENTITY
  • CLUSTERED