首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Create语句不适用于四个约束,但适用于两个?

Create语句不适用于四个约束,但适用于两个?
EN

Stack Overflow用户
提问于 2012-02-06 07:53:47
回答 2查看 3.4K关注 0票数 1

我正在尝试调试create语句的问题,但是错误消息没有任何意义。

脚本是:

代码语言:javascript
复制
CREATE TABLE    marlin.SupportLog
(
    IssueID             INTEGER         UNIQUE NOT NULL,
    TypeID              INTEGER         NOT NULL ,
    IssueDescription    VARCHAR(5000)   NOT NULL ,
    MinutesSpent        INTEGER         NOT NULL ,
    PriorityID          INTEGER         NOT NULL ,
    UserID              INTEGER         NOT NULL ,
    SubmittedDate       DATETIME        NOT NULL    DEFAULT SYSDATETIME() ,
    LastModifiedDate    DATETIME        NULL        DEFAULT SYSDATETIME() ,
    LastModifiedUserID  INTEGER         NULL

    CONSTRAINT  SupportLog_pk
        PRIMARY KEY NONCLUSTERED (IssueID)

    CONSTRAINT  TypeID_fk
        FOREIGN KEY (TypeID)
            REFERENCES  marlin.SupportIssueType(TypeID)

    CONSTRAINT  SLPriorityID_fk
        FOREIGN KEY (PriorityID)
            REFERENCES  marlin.SupportPriority(PriorityID)

    CONSTRAINT  UserID_fk
        FOREIGN KEY (UserID)
            REFERENCES marlin.SupportUsers(UserID)
);

如果我注释掉最后两个约束,表可以正常工作,但是,如果我按照上面的方式运行它,我会收到:

代码语言:javascript
复制
Msg 8148, Level 16, State 0, Line 1
More than one column FOREIGN KEY constraint specified for column 'LastModifiedUserID', table 'marlin.SupportLog'.
Msg 8148, Level 16, State 0, Line 1
More than one column FOREIGN KEY constraint specified for column 'LastModifiedUserID', table 'marlin.SupportLog'.

错误似乎没有帮助-我不理解什么/我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-06 08:19:55

CREATE TABLE语句在每个CONSTRAINT前缺少逗号。

票数 12
EN

Stack Overflow用户

发布于 2012-02-06 08:41:22

在创建表时,有两种执行约束的方法。在表级或列级。例如(使用Oracle,没有SQL Server,但它们具有相同的概念):

代码语言:javascript
复制
-- column level
create table t(c1 number constraint t_uk1 unique
    , c2 number constraint t_uk2 unique);

-- table level
create table t(c1 number
    , c2 number
    , constraint t_uk1 unique(c1)
    , constraint t_uk2 unique(c2));

在您的例子中,没有逗号的情况是,您对表中的最后一列有多个列级约束。我同意这条信息没有帮助。SQL Server猜测的含义与您的预期不同。

注意:当涉及多个列时,必须使用表约束。

列级约束中涉及的列是隐式的。假设一旦SQL Server通过了对一个列的多个外键约束,它就会开始抱怨列的指定方式与它所抱怨的列的指定位置不同。

更多细节可以在MSDN上找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9154227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档