SQL Server 2005 でテーブル、ストアド プロシージャ、トリガー、制約、およびすべての依存関係を 1 つの SQL ステートメントでドロップする方法
SQL Server 2005 でテーブル、ストアド プロシージャ、トリガー、制約、およびすべての依存関係を 1 つの SQL ステートメントでドロップする
EXEC sp_MSforeachtable
@command1 = '
DECLARE @TableName VARCHAR(255)
SELECT @TableName = name
FROM sys.tables
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @TableName AND type = ''U'')
BEGIN
DROP TABLE @TableName
END
'
@command2 = '
DECLARE @ProcName VARCHAR(255)
SELECT @ProcName = name
FROM sys.procedures
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @ProcName AND type = ''P'')
BEGIN
DROP PROCEDURE @ProcName
END
'
@command3 = '
DECLARE @TriggerName VARCHAR(255)
SELECT @TriggerName = name
FROM sys.triggers
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @TriggerName AND type = ''TR'')
BEGIN
DROP TRIGGER @TriggerName
END
'
@command4 = '
DECLARE @ConstraintName VARCHAR(255)
SELECT @ConstraintName = name
FROM sys.constraints
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @ConstraintName AND type = ''C'')
BEGIN
ALTER TABLE [dbo].[TableName] DROP CONSTRAINT @ConstraintName
END
'
このコードは、以下の手順を実行します。
sp_MSforeachtable
システムストアドプロシージャを使用して、すべてのユーザーテーブルをループ処理します。- 各テーブルに対して、
DROP TABLE
ステートメントを使用してテーブルをドロップします。 - 同様に、
sp_MSforeachtable
を使用して、すべてのユーザーストアドプロシージャをループ処理し、DROP PROCEDURE
ステートメントを使用してドロップします。
注意事項:
- このコードを実行する前に、データベースをバックアップすることを強くお勧めします。
- このコードは、すべてのユーザーオブジェクトをドロップします。システムオブジェクトはドロップされません。
- 特定のテーブル、ストアドプロシージャ、トリガー、または制約のみをドロップしたい場合は、上記のコードを修正する必要があります。
USE [MyDatabase]
EXEC sp_MSforeachtable
@command1 = '
DECLARE @TableName VARCHAR(255)
SELECT @TableName = name
FROM sys.tables
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @TableName AND type = ''U'')
BEGIN
PRINT ''Dropping table [' + @TableName + ']...''
DROP TABLE @TableName
END
'
@command2 = '
DECLARE @ProcName VARCHAR(255)
SELECT @ProcName = name
FROM sys.procedures
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @ProcName AND type = ''P'')
BEGIN
PRINT ''Dropping stored procedure [' + @ProcName + ']...''
DROP PROCEDURE @ProcName
END
'
@command3 = '
DECLARE @TriggerName VARCHAR(255)
SELECT @TriggerName = name
FROM sys.triggers
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @TriggerName AND type = ''TR'')
BEGIN
PRINT ''Dropping trigger [' + @TriggerName + ']...''
DROP TRIGGER @TriggerName
END
'
@command4 = '
DECLARE @ConstraintName VARCHAR(255)
SELECT @ConstraintName = name
FROM sys.constraints
WHERE is_ms_shipped = 0
ORDER BY name
IF EXISTS (SELECT * FROM sys.objects WHERE name = @ConstraintName AND type = ''C'')
BEGIN
PRINT ''Dropping constraint [' + @ConstraintName + ']...''
ALTER TABLE [dbo].[TableName] DROP CONSTRAINT @ConstraintName
END
'
このコードを実行すると、データベース内のすべてのユーザーテーブル、ストアドプロシージャ、トリガー、および制約がドロップされます。
実行前に必ずデータベースをバックアップしてください。
他の方法
SSMS を使用
SQL Server Management Studio (SSMS) を使用して、オブジェクトを手動でドロップすることができます。
- SSMS を開き、データベースに接続します。
- オブジェクトエクスプローラーで、ドロップしたいオブジェクトを展開します。
- オブジェクトを右クリックし、削除 を選択します。
- 確認メッセージで OK をクリックします。
T-SQL ステートメントを使用
個別の T-SQL ステートメントを使用して、オブジェクトを手動でドロップすることができます。
-- テーブルをドロップする
DROP TABLE [TableName]
-- ストアドプロシージャをドロップする
DROP PROCEDURE [ProcName]
-- トリガーをドロップする
DROP TRIGGER [TriggerName]
-- 制約をドロップする
ALTER TABLE [TableName] DROP CONSTRAINT [ConstraintName]
スクリプトを使用
サードパーティ製ツールを使用
いくつかのサードパーティ製ツールは、データベースオブジェクトをドロップするのに役立ちます。
sql sql-server sql-server-2005