【问题标题】:Create named Column default in CREATE TABLE statement in ANSI SQL在 ANSI SQL 的 CREATE TABLE 语句中创建命名列默认值
【发布时间】:2011-10-26 21:47:22
【问题描述】:

如果可能,我想在 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' 附近的语法不正确。

【问题讨论】:

    标签: sql ansi-sql


    【解决方案1】:

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

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

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

    • 方括号作为带引号的标识符(应该是双引号)
    • 不合规的数据类型(例如不正确的bit null 行为)
    • 缩写数据类型(例如int 而不是INTEGER)
    • IDENTITY
    • CLUSTERED

    【讨论】:

    • 谢谢,这样好多了。还要感谢 Mimer 验证器链接。最近SQL Server太多了,我要复习一下:)
    【解决方案2】:

    它不符合 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)
    )
    

    【讨论】:

    猜你喜欢
    • 2015-01-08
    • 2011-04-15
    • 2021-07-29
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2012-12-12
    相关资源
    最近更新 更多