SQL ServerにおけるCREATE TABLE IF NOT EXISTSの等価表現のコード例
SQL ServerにおけるCREATE TABLE IF NOT EXISTSの等価表現
SQL Server では、直接 CREATE TABLE IF NOT EXISTS
ステートメントをサポートしていません。しかし、同じ機能を実現するために次の方法を使用することができます。
IF NOT EXISTS 句を使用したCREATE TABLE
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'YourTableName')
BEGIN
CREATE TABLE YourTableName (
-- Column definitions
)
END
この方法では、指定されたテーブルが存在しない場合にのみ、テーブルを作成します。
TRY...CATCH ブロックを使用したCREATE TABLE
BEGIN TRY
CREATE TABLE YourTableName (
-- Column definitions
)
END TRY
BEGIN CATCH
-- エラー処理
END CATCH
この方法では、テーブルの作成中にエラーが発生した場合に、エラー処理を実行することができます。
注意:
INFORMATION_SCHEMA.TABLES
はシステムビューであり、データベース内のテーブルに関する情報を提供します。TRY...CATCH
ブロックを使用する場合、エラーが発生した場合の適切なエラー処理を実装する必要があります。
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'MyNewTable')
BEGIN
CREATE TABLE MyNewTable (
ID INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR(50),
Age INT
)
END
このコードは、MyNewTable
という名前のテーブルが存在しない場合にのみ、そのテーブルを作成します。テーブルが既に存在する場合、何も実行されません。
BEGIN TRY
CREATE TABLE MyNewTable (
ID INT PRIMARY KEY IDENTITY(1,1),
Name VARCHAR(50),
Age INT
)
END TRY
BEGIN CATCH
PRINT 'テーブルの作成に失敗しました。エラーメッセージ: ' + ERROR_MESSAGE()
END CATCH
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'YourTableName')
BEGIN
CREATE TABLE YourTableName (
-- Column definitions
)
END
BEGIN TRY
CREATE TABLE YourTableName (
-- Column definitions
)
END TRY
BEGIN CATCH
-- エラー処理
END CATCH
Dynamic SQLを使用したCREATE TABLE
DECLARE @sql NVARCHAR(MAX) = 'CREATE TABLE YourTableName (
-- Column definitions
)';
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'YourTableName')
BEGIN
EXEC sp_executesql @sql;
END
この方法では、動的なSQLを使用してテーブルを作成し、テーブルが存在しない場合にのみ実行します。
Stored Procedureを使用したCREATE TABLE
CREATE PROCEDURE CreateTableIfNotExists
@TableName NVARCHAR(128)
AS
BEGIN
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TableName)
BEGIN
DECLARE @sql NVARCHAR(MAX) = 'CREATE TABLE ' + @TableName + ' (
-- Column definitions
)';
EXEC sp_executesql @sql;
END
END
sql sql-server sql-server-2008-r2