数据不匹配时SQL Server重建外键的解决方案
解决SQL Server中重建外键时数据不匹配的问题
在SQL Server里,你可以用WITH NOCHECK选项跳过现有数据的完整性检查来重建外键,这完全符合你的需求——不用修改现有数据,只强制后续操作遵守约束。具体步骤如下:
1. 删除关联的外键约束
先找到从表上的外键名称,执行删除:ALTER TABLE [你的从表名] DROP CONSTRAINT [外键约束名];2. 删除原主键并重建为聚集索引
删除原来的非聚集主键,然后创建带CLUSTERED选项的主键:ALTER TABLE [你的主表名] DROP CONSTRAINT [原主键约束名]; ALTER TABLE [你的主表名] ADD CONSTRAINT [新主键约束名] PRIMARY KEY CLUSTERED ([主键列名]);3. 用WITH NOCHECK重建外键
这个选项会跳过现有数据的校验,直接创建约束:ALTER TABLE [你的从表名] WITH NOCHECK ADD CONSTRAINT [外键约束名] FOREIGN KEY ([从表关联列名]) REFERENCES [你的主表名]([主键列名]);
额外说明
- 用
WITH NOCHECK创建的外键,SQL Server不会验证已存在的数据,但会对之后的INSERT/UPDATE/DELETE操作强制约束规则。 - 如果之后你想验证现有数据的完整性(可选),可以执行:
不过这一步如果现有数据不匹配会报错,你不想修改数据的话可以跳过。ALTER TABLE [你的从表名] CHECK CONSTRAINT [外键约束名]; - 注意:如果用SSMS图形界面操作外键,默认会检查现有数据,所以必须用T-SQL语句加上
WITH NOCHECK选项。
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

