我正在使用我的数据库中的主键:
我发现主键是重复的异常,这不是我的预期。 idQuestionaire和version的组合需要是唯一的,这样我的插入脚本才能工作。
我尝试了以下内容: 在" Keys" servey的文件夹有4个键(主键,来自parkinglottype的外键,调查$ idQuestionnaire_UNIQUE和调查$ version_UNIQUE)
删除UNIQUE键后,插入脚本工作正常但我的调查问题的外键不再起作用了......
这是"调查$ idQuestionnaire_UNIQUE"的代码:
ALTER TABLE [dbo].[survey] ADD CONSTRAINT [survey$idQuestionnaire_UNIQUE] UNIQUE NONCLUSTERED
(
[idQuestionnaire] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
这是我的主键:
ALTER TABLE [dbo].[survey] ADD CONSTRAINT [PK_survey_idQuestionnaire] PRIMARY KEY CLUSTERED
(
[idQuestionnaire] ASC,
[version] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
如何使用2列使群集主键唯一,并且仍然可以将其用作外键?
答案 0 :(得分:0)
如果“调查”的主键是两个列“idQuestionnaire”和“version”,则向“idQuestionnaire”添加唯一索引是错误的。单独的那列不唯一,从主键约束和INSERT语句中可以明显看出这一点。
SQL Server在主键上构建索引。通常不需要主键列上的其他索引。
您的外键约束需要引用列的对,如...(Survey_idQuestionnaire, Survey_version) references [dbo].[survey] (idQuestionnaire, version)
。