2016-08-02 22 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

テーブル名にUnicode文字が含まれる可能性があるため、変数を 'NVARCHAR'として宣言する必要があります。あなたはテーブルの数(したがってSQLの長さ)を知らないので、 '@ ExecSQL'を長さ'(MAX) 'にする必要があります。そしてあなたは* QUOTENAME(スキーマ)+ 'という2つの部分名を使うべきです。' + QUOTENAME(name) 'は異なるスキーマに属する可能性があるためです。そして、**あなたは大文字と小文字を区別する照合DBであなたの例が失敗するでしょう。 –

+1

@RemusRusanu:お知らせいただきありがとうございます。上記のポイントは修正されます。 – Arulkumar

+0

おかげで解決しました私の問題 –

-3
  1. はプレス
  2. それに削除ボタンをクリックすることで、テーブルを選択し、エンターキーを押します。 メモ:依存関係(外部キー)がある場合、テーブルは削除されません。
関連する問題