SQL Serverで複数の列を1つのALTER TABLEステートメントで削除する方法
SQL Server では、ALTER TABLE
ステートメントを使用して、テーブルの構造を変更できます。このステートメントには、列の追加、削除、変更など、さまざまなオプションがあります。
このチュートリアルでは、1 つの ALTER TABLE
ステートメントを使用して複数の列を削除する方法について説明します。
手順
- SQL Server Management Studio (SSMS) を開き、データベースに接続します。
- オブジェクト エクスプローラーで、テーブルを右クリックし、テーブルの変更 を選択します。
- テーブルの変更 ダイアログ ボックスで、デザイン タブを選択します。
- 削除する列を選択します。
- 削除 ボタンをクリックします。
例
次の例では、Customers
テーブルから FirstName
と LastName
列を削除します。
ALTER TABLE Customers
DROP COLUMN FirstName,
DROP COLUMN LastName;
注意事項
- 列を削除する前に、その列に依存するデータがないことを確認してください。
- 主キーまたはユニーク キーの一部である列を削除することはできません。
- 外部キーの一部である列を削除するには、まず外部キー制約を削除する必要があります。
- 複数の列を削除するには、
DROP COLUMN
ステートメントを複数回実行することもできます。 - Transact-SQL を使用して、
ALTER TABLE
ステートメントを記述することもできます。
補足
- 上記の手順は、SQL Server 2017 で説明していますが、他のバージョンでも同様の手順で実行できます。
- SSMS を使用せずに、Transact-SQL を直接使用してクエリを実行することもできます。
USE AdventureWorks2019;
-- 1つのALTER TABLEステートメントで複数の列を削除
ALTER TABLE Person.Contact
DROP COLUMN MiddleName,
DROP COLUMN Suffix;
-- 削除する列を確認
SELECT *
FROM Person.Contact;
FirstName LastName EmailPhone
John Doe [email protected]
Jane Doe [email protected]
解説
- このコードは、
AdventureWorks2019
データベースのPerson.Contact
テーブルからMiddleName
とSuffix
列を削除します。 DROP COLUMN
ステートメントを複数回使用して、複数の列を削除することができます。- 削除する列を確認するには、
SELECT
ステートメントを使用してテーブルの内容をクエリできます。
- 次の例では、
Person.Contact
テーブルからMiddleName
列を削除し、Suffix
列の名前をTitle
に変更します。
ALTER TABLE Person.Contact
DROP COLUMN MiddleName,
RENAME COLUMN Suffix TO Title;
ALTER TABLE Person.Contact
DROP COLUMN MiddleName,
ALTER COLUMN Email ALTER TYPE varchar(100);
1 つの ALTER TABLE ステートメントで複数の列を削除する他の方法
- WHILE ループを使用する
DECLARE @columnName VARCHAR(128)
WHILE EXISTS (SELECT TOP 1 @columnName = c.name
FROM sys.columns c
WHERE c.object_id = OBJECT_ID('Person.Contact')
AND c.is_nullable = 0
AND c.name IN ('MiddleName', 'Suffix'))
BEGIN
ALTER TABLE Person.Contact
DROP COLUMN @columnName;
SET @columnName = (SELECT TOP 1 c.name
FROM sys.columns c
WHERE c.object_id = OBJECT_ID('Person.Contact')
AND c.is_nullable = 0
AND c.name IN ('MiddleName', 'Suffix')
ORDER BY c.name);
END
- このコードは、
sys.columns
カタログ ビューを使用して、Person.Contact
テーブルで削除可能な列を検索します。 WHILE
ループを使用して、削除可能な列が見つかるまで、DROP COLUMN
ステートメントを実行します。
- 動的 SQL を使用する
DECLARE @sql NVARCHAR(MAX)
SET @sql = N'ALTER TABLE Person.Contact DROP COLUMN '
SELECT @sql = @sql + c.name + ', '
FROM sys.columns c
WHERE c.object_id = OBJECT_ID('Person.Contact')
AND c.is_nullable = 0
AND c.name IN ('MiddleName', 'Suffix')
SET @sql = LEFT(@sql, LEN(@sql) - 2)
EXEC sp_executesql @sql
- このコードは、動的 SQL を使用して、
DROP COLUMN
ステートメントを生成します。 sys.columns
カタログ ビューを使用して、削除可能な列を検索します。sp_executesql
プロシージャを使用して、動的 SQL を実行します。
- これらの方法は、上記の基本的な方法よりも複雑です。
- これらの方法は、多くの列を削除する場合に役立ちます。
sql sql-server t-sql