2012-02-05 8 views
1

私はcreateステートメントで問題をデバッグしようとしていますが、エラーメッセージは実際には意味をなさないものです。Create文は4つの制約では機能しませんが、2つで動作しますか?

スクリプトは次のとおりです。

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

私は私が受け取る上記のように、私はそれを実行しかし、もしテーブルが正常に動作し、最後の2つの制約をコメントアウトした場合:

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に適合しません。奇妙な。他の3つのテーブルにDMLを貼り付けて、完全に書き直すことはできますか? – usr

+3

カンマがありませんか? –

+0

@JohnPickああ、さあ!カンマがありません。しかし、このような曖昧なエラーメッセージ!これを回答として投稿することができれば、私は同意しますので、適切な評判を得ることができます。 – Codingo

答えて

11

CREATE TABLEステートメントには、それぞれCONSTRAINTの前にコンマがありません。

2

表を作成するときには、制約を実行する2つの方法があります。表レベルまたは列レベル。例えば(オラクル、便利ななし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にあります。

関連する問題