我正在尝试使用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 :(得分:12)
CREATE TABLE
语句在每个CONSTRAINT
之前缺少逗号。
答案 1 :(得分: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找到。