创建语句不适用于四个约束,但与两个约束?
问题描述:
我正在尝试使用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'.
的错误不会出现帮助 - 我不了解什么/我做了什么错误?
答
CREATE TABLE
声明在每个CONSTRAINT
之前缺少一个逗号。
答
创建表格时有两种约束方式。在表级或列级别。例如(使用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。
错误消息不适合SQL ?!奇怪。你可以将DML发布到其他三张表中,以便我们可以完全复制? – usr 2012-02-05 23:57:06
缺失逗号? – 2012-02-06 00:08:42
@JohnPick哦,来吧!缺少逗号。虽然这样一个模棱两可的错误信息!如果您可以将此作为答案发布,我会接受,以便您获得适当的声誉。 – Codingo 2012-02-06 00:12:38