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。