Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sql server 2008中引用的表中没有主键或候选键_Sql Server - Fatal编程技术网

Sql server sql server 2008中引用的表中没有主键或候选键

Sql server sql server 2008中引用的表中没有主键或候选键,sql-server,Sql Server,类代码表 CREATE TABLE [dbo].[ClassCode]( [SchoolCode] [nvarchar](10) NOT NULL, [ClassCode] [nvarchar](4) NOT NULL, [ClassName] [nvarchar](50) NOT NULL, [ClassRange] [int] NOT NULL, [ClassDuration] numeric(38,2) NOT NULL, [UserID] [nvarchar](30) NULL, [Re

类代码表

CREATE TABLE [dbo].[ClassCode](
[SchoolCode] [nvarchar](10) NOT NULL,
[ClassCode] [nvarchar](4) NOT NULL,
[ClassName] [nvarchar](50) NOT NULL,
[ClassRange] [int] NOT NULL,
[ClassDuration] numeric(38,2) NOT NULL,
[UserID] [nvarchar](30) NULL,
[RecordDate] [smalldatetime] NULL,  
 CONSTRAINT [PK_ClassCode] PRIMARY KEY CLUSTERED 
(
    [SchoolCode] ASC,
    [ClassCode] ASC,
    [ClassRange]
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
检查表

CREATE TABLE [dbo].[ExamDeclaration](
[SchoolCode] [nvarchar](10) NOT NULL,
[ClassCode] [nvarchar](4) NOT NULL,
[ExamCode] [nvarchar](4) NOT NULL,
[RegistationFess] numeric(38,2) NOT NULL,
[RegistatinStartDate] [date] NOT NULL,
[RegistatinEndDate] [date] NOT NULL,
[ExamStartDate] [date] NOT NULL,
[UserID] [nvarchar](30) NULL,
[RecordDate] [smalldatetime] NULL
 CONSTRAINT [PK_ExamDeclaration] PRIMARY KEY CLUSTERED 
(
    [SchoolCode] ASC,
    [ClassCode] ASC,
    [ExamCode] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


GO

ALTER TABLE [dbo].[ExamDeclaration]  WITH CHECK ADD  CONSTRAINT [FK_ExamDeclaration_ClassCode] FOREIGN KEY([ClassCode])
REFERENCES [dbo].[ClassCode] ([ClassCode])
GO

ALTER TABLE [dbo].[ExamDeclaration] CHECK CONSTRAINT [FK_ExamDeclaration_ClassCode]
GO
我正在尝试设置外键类代码

但我犯了这个错误

Msg 1776,16级,状态0,第2行没有初级或候选 引用表“dbo.ClassCode”中与 在外键中引用列列表 “FK_考试类别代码”。Msg 1750,第16级,第0状态,第2行 无法创建约束。请参阅前面的错误。味精4917,16级, 状态0,第2行约束“FK_ExamDecration_ClassCode”不存在 存在。Msg 4916,级别16,状态0,第2行无法启用或禁用 约束。请参阅前面的错误

这两张表有什么问题


谢谢。

您的外键必须与主键完全匹配! 如果像这样声明主键PK(X int,Y int,Z int),那么必须像这样声明FK:FK(a int,b int,c int)引用MyTable(X,Y,Z)

在您的情况下,您的Pk是(学校代码、类代码、类范围)。这意味着您应该像这样声明FK:

ALTER TABLE[dbo].[ExamDeclaration]和CHECK ADD CONSTRAINT[FK\u ExamDeclaration\u ClassCode]外键(学校代码、类代码、类范围)
参考[dbo].[ClassCode](学校代码、ClassCode、ClassRange)
去


修改表ExamDeclaration,添加“ClassRange”列。

您不能用外键仅引用组合键的一部分。类代码中的主键是3列,但您试图在ExamDecration中仅将类代码作为外键引用。您必须将claacode作为pk或引用表类代码中的唯一索引。你没有这样的pk。