11

在我们最初的设计中,我们在表中搞砸了一个外键约束。现在表中充满了数据,如果不删除表中的所有记录,我们就无法更改它。我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里,然后删除所有记录,更改表并开始添加它们。还有其他(更好的)想法吗?谢谢!

使用 MS SQL 服务器

4

4 回答 4

23

来晚了,仅供参考。
如果您使用的是 SQL Server Management Studio,则可以使用“保留架构和数据”选项生成 DROP 和 RECREATE 脚本。

  1. 在对象资源管理器中右键单击所需的数据库
  2. 任务 > 生成脚本
  3. 选择要编写脚本的表
  4. 然后点击高级按钮
    • “脚本 DROP 和 CREATE”->“脚本 DROP 和 CREATE”
    • 要编写脚本的数据类型”->“架构和数据

希望这可以帮助

于 2017-08-02T15:01:54.270 回答
9

这是一些伪代码。无需备份表,只需创建一个具有正确约束的新表,将记录插入其中,然后重命名。

CREATE TABLE MyTable_2
(...field definitions)

<add the constraint to MyTable_2>

INSERT INTO MyTable_2 (fields)
SELECT fields
FROM MyTable

DROP TABLE MyTable

exec sp_rename 'MyTable2', 'Mytable'
于 2011-05-17T15:44:56.760 回答
3

这是您唯一的解决方案。

创建备份表,清空原表,修改表,然后逐步插入,直到发现违规。

于 2011-05-17T15:29:40.720 回答
3

使用 SQL Server Management Studio (SSMS),您可以使用它的表设计器来指定表的最终条件。在保存更改之前,让它生成更改脚本并保存该脚本。取消设计窗口,打开脚本并查看它。SSMS 可能已经生成了一个脚本,可以满足您的所有需求,修复主外键关系,同时保留所有现有数据。如果没有,您将拥有一个已经启动的脚本,该脚本执行您需要执行的大部分操作,并且应该能够根据您的需要对其进行修改。

于 2013-08-10T17:13:19.197 回答