Sql server SQL Server中不存在约束

Sql server SQL Server中不存在约束,sql-server,tsql,Sql Server,Tsql,我正在做一项任务,我应该在其中创建一个表,下面是代码: CREATE TABLE HumanResources.JobCandidateHistory ( JobCandidateID int NOT NULL UNIQUE, Resume xml NULL, Rating int NOT NULL CHECK(Rating BETWEEN 1 AND 10) DEFAULT 5, RejectedDate datetime NOT NULL, Conta

我正在做一项任务,我应该在其中创建一个表,下面是代码:

CREATE TABLE HumanResources.JobCandidateHistory
(
    JobCandidateID int NOT NULL UNIQUE,
    Resume xml NULL,
    Rating int NOT NULL CHECK(Rating BETWEEN 1 AND 10) DEFAULT 5,
    RejectedDate datetime NOT NULL,
    ContactID int FOREIGN KEY REFERENCES Person.Contact(ContactID)
);
因此,
评级
被选中。此任务的下一步是通过以下方式停用此检查:

ALTER TABLE HumanResources.JobCandidateHistory
NOCHECK CONSTRAINT CK_JobCandidateHistory_Rating;
GO

ALTER TABLE HumanResources.JobCandidateHistory
NOCHECK CONSTRAINT DF_JobCandidateHistory_Rating;
GO
但这样做,我会得到一个错误:

味精4917,第16级,状态0,第4行
约束“CK_JobCandidateHistory_Rating”不存在

味精4916,第16级,状态0,第4行
无法启用或禁用约束。请参阅前面的错误

味精4917,第16级,状态0,第7行
约束“DF_JobCandidateHistory_Rating”不存在

味精4916,第16级,状态0,第7行
无法启用或禁用约束。请参阅前面的错误


我不明白它出现的原因。据我所知,当检查列值时,此约束存在。

给出约束名称:

CREATE TABLE HumanResources.JobCandidateHistory(
    JobCandidateID int NOT NULL UNIQUE,
    Resume xml NULL,
    Rating int NOT NULL DEFAULT 5,
    constraint CK_JobCandidateHistory_Rating  check (Rating BETWEEN 1 AND 10),
    RejectedDate datetime NOT NULL,
    ContactID int,
    constraint DF_JobCandidateHistory_Rating FOREIGN KEY REFERENCES Person.Contact(ContactID)
);

内部名称与用户定义的名称大不相同。

请给出约束名称:

CREATE TABLE HumanResources.JobCandidateHistory(
    JobCandidateID int NOT NULL UNIQUE,
    Resume xml NULL,
    Rating int NOT NULL DEFAULT 5,
    constraint CK_JobCandidateHistory_Rating  check (Rating BETWEEN 1 AND 10),
    RejectedDate datetime NOT NULL,
    ContactID int,
    constraint DF_JobCandidateHistory_Rating FOREIGN KEY REFERENCES Person.Contact(ContactID)
);

内部名称与用户定义的名称大不相同。

您能解释一下,为什么DF必须在ContactID中吗?@Frepor。我不明白这个问题。这段代码有约束的名称。嗯,任务中给出了停用检查的代码,所以我不理解为什么DF_JobCandidateHistory_评级应该是ContactId值,如果它是评级的约束,至少是由name@Frepor . . . 我刚刚从您的代码中复制了名称。@Frepor:您似乎觉得约束定义必须始终在约束使用的列的定义之后内联。但事实并非如此。这样的约束定义只是一种捷径。约束可以在其自身的任何位置定义。注意
ContactID int,
的末尾,下面的约束定义不再是该项的一部分,而是它自己的一项。对于某些约束,甚至不能使用快捷方式,因为也可能存在涉及多个列的约束。您能解释一下,为什么DF必须在ContactID中吗?@Frepor。我不明白这个问题。这段代码有约束的名称。嗯,任务中给出了停用检查的代码,所以我不理解为什么DF_JobCandidateHistory_评级应该是ContactId值,如果它是评级的约束,至少是由name@Frepor . . . 我刚刚从您的代码中复制了名称。@Frepor:您似乎觉得约束定义必须始终在约束使用的列的定义之后内联。但事实并非如此。这样的约束定义只是一种捷径。约束可以在其自身的任何位置定义。注意
ContactID int,
的末尾,下面的约束定义不再是该项的一部分,而是它自己的一项。对于某些约束,甚至不能使用快捷方式,因为也可能存在涉及多个列的约束。如果您没有明确提供约束的名称,它们将被命名为系统名称-这些名称很难猜测-在您的情况下,当我在系统上重新创建此表时,检查约束被称为
CK\uuu JobCandid\uuu Ratin\uuuu 2DF28A67
,默认约束为
DF\uu JobCandid\uuu Ratin\uuuu 2EE6AEA0
,因此最佳实践是:始终为约束指定明确的名称,以便以后可以引用它们……如果您没有明确提供约束的名称,它们将被命名为系统名称-这些名称很难猜测-在您的情况下,当我在我的系统上重新创建此表时,检查约束被称为
CK\uu JobCandid\uu Ratin\uuu 2DF28A67
,默认约束为
DF\uu JobCandid\uu Ratin\uu 2EE6AEA0
——因此最佳实践是:始终为约束指定明确的名称,以便以后可以引用它们。。。。