【发布时间】:2016-09-14 15:25:02
【问题描述】:
类代码表
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
我正在尝试设置外键 ClassCode
但收到此错误
Msg 1776, Level 16, State 0, Line 2 没有主要或候选 引用表“dbo.ClassCode”中与 外键中的引用列列表 'FK_ExamDeclaration_ClassCode'。消息 1750,第 16 级,状态 0,第 2 行 无法创建约束。请参阅以前的错误。消息 4917,第 16 级, 状态 0,第 2 行约束“FK_ExamDeclaration_ClassCode”不 存在。消息 4916,级别 16,状态 0,行 2 无法启用或禁用 约束。查看以前的错误。
这两张表有什么问题?
谢谢你..
【问题讨论】:
-
您不能只用外键引用复合键的一部分。 ClassCode 中的主键是 3 列,但您试图仅将 ClassCode 引用为 ExamDeclaration 中的外键。
-
您必须有 claacode 作为 pk 或引用表 classcode 中的唯一索引。你没有这样的pk。
标签: sql-server