その他の方法: TRY...CATCH、CHECK CONSTRAINT、DEFAULT 値
SQL Server テーブルに列を追加する (存在しない場合のみ)
概要
手順
T-SQL ステートメント
IF NOT EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'テーブル名'
AND COLUMN_NAME = '列名'
)
BEGIN
ALTER TABLE テーブル名
ADD 列名 データ型;
END
説明
IF NOT EXISTS
ステートメントは、指定された列がテーブルに存在しない場合にのみ、次のステートメントを実行します。SELECT
ステートメントは、INFORMATION_SCHEMA.COLUMNS
ビューからテーブル名と列名を取得します。ALTER TABLE
ステートメントは、テーブルに新しい列を追加します。
例
IF NOT EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '顧客'
AND COLUMN_NAME = '電話番号'
)
BEGIN
ALTER TABLE 顧客
ADD 電話番号 VARCHAR(20);
END
この例では、顧客
テーブルに 電話番号
列が存在しない場合のみ、VARCHAR(20)
データ型の新しい列を追加します。
注意事項
- この方法は、列が存在しないことを確認してから列を追加する安全な方法です。
ALTER TABLE
ステートメントは、テーブルのスキーマを変更するため、慎重に使用してください。- データ型は、追加するデータに適していることを確認してください。
- SSMS を使用する:
- オブジェクト エクスプローラーでテーブルを右クリックし、「デザイン」を選択します。
- 列グリッドに新しい行を追加し、列名とデータ型を入力します。
- 「保存」をクリックします。
- .NET Framework を使用する:
System.Data.SqlClient
名前空間を使用して、SqlCommand
オブジェクトを作成します。ALTER TABLE
ステートメントをSqlCommand
オブジェクトに追加します。ExecuteNonQuery
メソッドを使用して、SqlCommand
オブジェクトを実行します。
USE AdventureWorks2019;
IF NOT EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Customers'
AND COLUMN_NAME = 'PhoneNumber'
)
BEGIN
ALTER TABLE Customers
ADD PhoneNumber VARCHAR(20);
END
このコードを実行するには、AdventureWorks2019
データベースに接続する必要があります。
以下のサンプルコードは、さまざまな方法で列を追加する方法を示しています。
SSMS を使用する
USE AdventureWorks2019;
-- オブジェクト エクスプローラーで Customers テーブルを右クリックし、「デザイン」を選択します。
-- 列グリッドに新しい行を追加し、次の情報を入力します。
-- 名前: PhoneNumber
-- データ型: VARCHAR(20)
-- 許容値: NULL
-- 「保存」をクリックします。
.NET Framework を使用する
using System;
using System.Data.SqlClient;
namespace AddColumn
{
class Program
{
static void Main(string[] args)
{
// 接続文字列
string connectionString = "Data Source=localhost;Initial Catalog=AdventureWorks2019;Integrated Security=True";
// SqlCommand オブジェクトを作成
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand("ALTER TABLE Customers ADD PhoneNumber VARCHAR(20)", connection);
// SqlCommand オブジェクトを実行
command.ExecuteNonQuery();
}
}
}
}
このコードを実行するには、.NET Framework 4.7 以降が必要です。
SQL Server テーブルに列を追加するその他の方法
TRY...CATCH ブロックを使用する
BEGIN TRY
ALTER TABLE テーブル名
ADD 列名 データ型;
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 1807 -- 列が存在する
PRINT '列 ' + 列名 + ' は既に存在します。'
ELSE
THROW;
END CATCH
この方法は、TRY...CATCH
ブロックを使用して、列が存在するかどうかをチェックします。
CHECK CONSTRAINT を使用する
ALTER TABLE テーブル名
ADD 列名 データ型
CONSTRAINT chk_列名 CHECK (列名 IS NOT NULL);
この方法は、CHECK CONSTRAINT
を使用して、列に値が必ず入力されるようにします。
DEFAULT 値を使用する
ALTER TABLE テーブル名
ADD 列名 データ型
DEFAULT 'デフォルト値';
この方法は、DEFAULT
値を使用して、列にデフォルト値を設定します。
既存の列を更新する
ALTER TABLE テーブル名
ALTER COLUMN 列名
SET DATA_TYPE データ型;
この方法は、既存の列のデータ型を変更します。
- 安全性を重視する場合は、
IF NOT EXISTS
ステートメントまたはTRY...CATCH
ブロックを使用することをお勧めします。 - エラー処理を簡略化したい場合は、
CHECK CONSTRAINT
を使用することができます。 - デフォルト値を設定したい場合は、
DEFAULT
値を使用することができます。 - 既存の列のデータ型を変更したい場合は、
ALTER COLUMN
ステートメントを使用することができます。 - GUI を使用したい場合は、SSMS を使用することができます。
- プログラムから列を追加したい場合は、.NET Framework を使用することができます。
sql-server addition not-exists