2

如果可能,我想在 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]
)

错误:

'for' 附近的语法不正确。

4

2 回答 2

5

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

CREATE TABLE T (c INTEGER DEFAULT 1 NOT NULL UNIQUE);

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

  • 方括号作为带引号的标识符(应该是双引号)
  • 不合规的数据类型(例如不正确的bit空行为)
  • 缩写的数据类型(例如int,而不是INTEGER
  • IDENTITY
  • CLUSTERED
于 2011-10-27T10:18:13.360 回答
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)
)
于 2011-10-26T22:02:11.863 回答