2011-05-17 235 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

相關問題