2008-08-11 55 views
5

是否有簡單的方法在SQL Server中刪除一組相互關聯的表格?理想情況下,我想避免擔心他們被拒絕的順序,因爲我知道在整個流程結束之前整個團隊都將離開。在SQL Server中刪除一組表格

回答

2

冒着聽起來很愚蠢的風險,我不相信SQL Server支持刪除/級聯語法。我認爲你可以配置一個刪除規則來執行級聯刪除(http://msdn.microsoft.com/en-us/library/ms152507.aspx),但據我所知,SQL Server的訣竅就是對每個要刪除的表執行一次drop drop查詢,然後檢查它是否正常工作。

0

我沒有訪問SQL Server,以測試這一點,但如何:

DROP TABLE IF EXISTS table1, table2, table3 CASCADE; 
0

我不知道,如果德里克的方法效果。您尚未將其標記爲最佳答案。

如果不是這樣:我猜,SQL Server 2005應該是可能的。
他們在那裏引入了異常(我還沒有用過)。因此,放下表格,捕捉異常,如果發生,並嘗試下一個表格,直到它們全部消失。
如果需要,可以將表的列表存儲在臨時表中,並使用光標對其進行遍歷。

0

我最終使用Apache的ddlutils來執行刪除操作,在我的情況下對它進行了整理,儘管只能在sql server中工作的解決方案會比較簡單一些。

@Derek Park,我不知道你可以用逗號隔開表格,所以這很方便,但它看起來並不像預期的那樣工作。下界如果EXISTS和CASCADE都被sql server識別出來,並且運行drop table X, Y, Z似乎只在它們應該按照所述順序被丟棄時才起作用。

另請參閱http://msdn.microsoft.com/en-us/library/ms173790.aspx,其中描述了drop table語法。

0

阻止您以任何順序刪除表的東西都是表之間的外鍵依賴關係。所以在你開始之前擺脫FK的。

  1. 使用INFORMATION_SCHEMA系統視圖,檢索與這些表的所有外鍵的列表
  2. 每一個外鍵
  3. 現在,你應該能夠刪除所有的表,使用的降任何你想要的訂單。
1

一種不同的方法可能是:首先擺脫約束條件,然後將這些表格放在一個鏡頭中。

換句話說,每個約束的DROP CONSTRAINT,然後是每個表的DROP TABLE;此時執行順序不應該成爲問題。

1

這需要sp___drop___constraints腳本,你可以找到Database Journal

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?" 
GO 
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?" 
GO 

注意這一點 - 很明顯 - 如果你的意思是放棄所有的表在數據庫中,所以要小心