SQL drop table并重新创建并保留数据

时间:2011-05-17 15:26:25

标签: sql sql-server foreign-keys sql-drop

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

使用MS SQL Server

4 个答案:

答案 0 :(得分:8)

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

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'

答案 1 :(得分:8)

我有点晚了,仅供参考 如果您使用的是SQL Server Management Studio,则可以使用&#34; Keep schema and data&#34;生成DROP和RECREATE脚本。选项。

  1. 右键单击对象资源管理器中的所需数据库
  2. 任务&gt;生成脚本
  3. 选择要编写脚本的表格
  4. 然后单击“高级”按钮
    • &#34;脚本DROP和CREATE&#34; - &gt;&#34;脚本DROP和CREATE&#34;
    • &#34; 脚本数据类型&#34; - &GT; &#34; 架构和数据&#34;
  5. 希望这有帮助

答案 2 :(得分:3)

这是您唯一的解决方案。

创建备份表,清空原始备份表,修改表,然后逐步插入,直到找到违规行为。

答案 3 :(得分:3)

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