2012-02-05 27 views
1

我正在尝试使用create语句调试问题,但是我的错误消息并没有任何意义。创建语句不适用于四个约束,但与两个约束?

的脚本是:

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) 
); 

如果我注释掉最后两个约束表工作正常,但是如果我运行它如上面我收到:

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'. 

的错误不会出现帮助 - 我不了解什么/我做了什么错误?

+0

错误消息不适合SQL ?!奇怪。你可以将DML发布到其他三张表中,以便我们可以完全复制? – usr 2012-02-05 23:57:06

+3

缺失逗号? – 2012-02-06 00:08:42

+0

@JohnPick哦,来吧!缺少逗号。虽然这样一个模棱两可的错误信息!如果您可以将此作为答案发布,我会接受,以便您获得适当的声誉。 – Codingo 2012-02-06 00:12:38

回答

11

CREATE TABLE声明在每个CONSTRAINT之前缺少一个逗号。

2

创建表格时有两种约束方式。在表级或列级别。例如(使用Oracle,不SQL Server的方便,但它们都具有相同的概念):

-- 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