2016-08-02 101 views
6

我的數據庫中有大約50多個表格現在我想要的是刪除數據庫中的所有表格,除非少數。刪除SQL Server數據庫中的所有表格,除了少數

現在我所知道的是sys.tables的是,列出所有表所以最初的表我跑了一個這樣的查詢

delete from sys.tables where name like '%DynamicSurgery' (or any other condition) 

認爲它可能工作。但正如我預期它會拋出一個錯誤,因爲

不允許對系統目錄進行臨時更新。

請告訴我是否有辦法刪除SQL Server中的倍數?

+1

測試和開發網站?有一個腳本來重新創建數據庫。在需要時從頭開始。 – jarlh

+1

你可以編寫一個遊標來遍歷sys.tables,在這裏你建立了drop table語句並執行它們。 – HoneyBadger

回答

10

您可以使用動態查詢DROP需要的表:

DECLARE @ExecSQL AS NVARCHAR (MAX) = ''; 

SELECT @ExecSQL = @ExecSQL + 
    'DROP TABLE ' + QUOTENAME(S.name) + '.' + QUOTENAME(T.name) + '; ' 
FROM sys.tables T 
JOIN sys.schemas S ON S.schema_id = T.schema_id 
WHERE T.name LIKE '%DynamicSurgery' 

--PRINT @ExecSQL 
EXEC (@ExecSQL) 
+6

您*必須*將變量聲明爲'NVARCHAR',因爲表名可能包含Unicode字符。由於不知道表的數量(因此SQL的長度),您應該*製作長度爲「(MAX)」的@ ExecSQL。你*應該*使用2個部分名稱'QUOTENAME(schema)+'。' + QUOTENAME(name)',因爲表可能屬於不同的模式。並且*必須*通過正確的名稱引用系統表和列,**包括case **,您的示例將在區分大小寫的整理數據庫上失敗。 –

+1

@RemusRusanu:謝謝你的通知。所述點被糾正。 – Arulkumar

+0

謝謝你解決了我的問題 –

-3
  1. 通過點擊它
  2. 按刪除按鈕選擇表,然後回車。 注意:如果有任何依賴關係(外鍵),表格將不會被刪除
相關問題