2011-05-17 241 views
4

在我们的原始设计中,我们在表中锁定了一个外键约束。现在表格中充满了数据,我们不能在不删除表格中的所有记录的情况下对其进行更改。我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里,然后删除所有记录,修改表并开始添加它们。任何其他(更好)的想法?谢谢!SQL删除表并重新创建并保留数据

使用MS SQL Server

+2

哪些DBMS您使用的? – 2011-05-17 15:28:45

+0

为什么不只是删除外键约束? – 2011-05-17 15:29:43

+0

你正在使用哪个数据库?你想在桌上做什么改变? – reggie 2011-05-17 15:30:07

回答

3

这是您唯一的解决方案。

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

7

这是一些伪代码。不需要创建备份表,只需使用正确的约束创建一个新表,将记录插入其中,然后重命名即可。

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

这里唯一的问题是如果你有DB对象的标准命名约定(例如主键PK_TABLENAME);表格重命名后其他的东西需要调整 – Tao 2011-05-17 15:49:04

2

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

+0

请进一步解释。我如何获得脚本? – 2017-06-07 07:29:27

+0

在SSMS中,进入“工具”菜单,选择“选项”。展开'Designers'节点并选择'Table and Database Designers'。确保选中了“自动生成更改脚本”复选框。这将使SSMS在与设计人员进行更改时自动生成SQL脚本。 如果您在设计器中进行了更改,则可以右键单击并从上下文菜单中选择“生成更改脚本...”。这与SSMS选项设置无关,但生成的对话框允许您更改选项设置。 – Zarepheth 2017-06-07 13:03:00

+0

谢谢@zarepheth,不会想到这一点,像一个魅力 – 2017-06-29 07:22:40

1

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

    在对象资源管理器中所需的DB
  1. 右键
  2. 任务>生成脚本
  3. 选择表要脚本
  4. 然后单击高级按钮
    • “脚本拖动和创建“ - >”脚本删除并创建“
    • 脚本数据的类型“ - >”架构和数据

希望这有助于

+0

感谢@voodoo_patch! – 2018-01-26 15:30:15

相关问题