OBJECT_ID関数、sys.tablesカタログビュー、sp_tablesシステムプロシージャの使い方
SQL Serverでテーブルが存在するかどうかを確認して削除する方法
SQL Serverでテーブルを削除するには、DROP TABLE
ステートメントを使用します。しかし、テーブルが存在しない場合、DROP TABLE
ステートメントはエラーを発生します。そこで、テーブルが存在するかどうかを確認してから削除する必要があります。
方法
テーブルが存在するかどうかを確認して削除するには、以下の2つの方法があります。
IF EXISTS
ステートメントを使用すると、テーブルが存在するかどうかを確認してから削除することができます。
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'テーブル名')
BEGIN
DROP TABLE テーブル名;
END
TRY...CATCH
ステートメントを使用すると、DROP TABLE
ステートメントの実行時に発生するエラーをキャッチして処理することができます。
BEGIN TRY
DROP TABLE テーブル名;
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 3701
BEGIN
-- テーブルが存在しない場合の処理
END
END CATCH
補足
- 上記の例では、
テーブル名
を実際のテーブル名に置き換えてください。 DROP TABLE
ステートメントを実行する前に、テーブルに関連するデータやオブジェクトをすべて削除しておく必要があります。- テーブルを削除すると、そのテーブルに関連するすべてのデータも削除されます。
-- テーブルが存在するかどうかを確認して削除するサンプルコード
-- テーブル名
DECLARE @TableName VARCHAR(50) = 'TestTable';
-- テーブルが存在するかどうかを確認
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName)
BEGIN
-- テーブルが存在する場合
PRINT 'テーブル ' + @TableName + ' は存在します。'
-- テーブルを削除
DROP TABLE @TableName;
PRINT 'テーブル ' + @TableName + ' を削除しました。'
END
ELSE
BEGIN
-- テーブルが存在しない場合
PRINT 'テーブル ' + @TableName + ' は存在しません。'
END
- SQL Server Management Studio (SSMS) を起動します。
- 新しいクエリウィンドウを開きます。
- 上記のサンプルコードをクエリウィンドウに貼り付けます。
@TableName
変数を実際のテーブル名に置き換えます。- クエリを実行します。
出力例
テーブル TestTable は存在します。
テーブル TestTable を削除しました。
TRY...CATCH
ステートメントを使用してテーブルを削除する場合は、以下のコードのように変更します。
BEGIN TRY
DROP TABLE @TableName;
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 3701
BEGIN
PRINT 'テーブル ' + @TableName + ' は存在しません。'
END
END CATCH
テーブルが存在するかどうかを確認して削除するその他の方法
OBJECT_ID
関数は、指定されたオブジェクトの ID を返します。テーブルが存在するかどうかを確認するには、OBJECT_ID
関数の戻り値が 0 かどうかを確認します。
IF OBJECT_ID('テーブル名') IS NOT NULL
BEGIN
DROP TABLE テーブル名;
END
sys.tables
カタログビューには、データベース内のすべてのテーブルの情報が格納されています。テーブルが存在するかどうかを確認するには、sys.tables
カタログビューをクエリして、テーブル名が存在するかどうかを確認します。
IF EXISTS (SELECT * FROM sys.tables WHERE TABLE_NAME = 'テーブル名')
BEGIN
DROP TABLE テーブル名;
END
EXEC sp_tables @table_name = 'テーブル名'
IF @@ROWCOUNT > 0
BEGIN
DROP TABLE テーブル名;
END
sql-server t-sql