2012-02-05 31 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