SQL Serverで複数の列を1つのALTER TABLEステートメントで削除する方法

2024-04-02

SQL Server では、ALTER TABLE ステートメントを使用して、テーブルの構造を変更できます。このステートメントには、列の追加、削除、変更など、さまざまなオプションがあります。

このチュートリアルでは、1 つの ALTER TABLE ステートメントを使用して複数の列を削除する方法について説明します。

手順

  1. SQL Server Management Studio (SSMS) を開き、データベースに接続します。
  2. オブジェクト エクスプローラーで、テーブルを右クリックし、テーブルの変更 を選択します。
  3. テーブルの変更 ダイアログ ボックスで、デザイン タブを選択します。
  4. 削除する列を選択します。
  5. 削除 ボタンをクリックします。

次の例では、Customers テーブルから FirstNameLastName 列を削除します。

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 テーブルから MiddleNameSuffix 列を削除します。
  • 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 ステートメントで複数の列を削除する他の方法

  1. 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 ステートメントを実行します。
  1. 動的 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


INFORMATION_SCHEMA.USER_DEFINED_TYPES ビューって何?

sys. table_types システムカタログビューには、データベース内のすべてのユーザー定義型に関する情報が含まれています。このビューを使用して、次のクエリを実行することで、ユーザー定義型のリストを取得できます。このクエリは、次の列を含む結果セットを返します。...


SQL Server Management Studioを使用してSQLバージョン番号でソートする方法

SQL Server Management Studio (SSMS) がインストールされていること。SQL Serverデータベースへの接続権限を持っていること。次の列をテーブルに追加します。 VersionNumber (int 型) VersionString (varchar(50) 型)...


C#とSQL Serverの連携を強化!ストアドプロシージャの威力を体験しよう

ADO. NETは、.NET Frameworkで提供されるデータアクセス技術です。ADO. NETを使用してストアドプロシージャを実行するには、次の手順が必要です。SqlConnectionオブジェクトを作成するストアドプロシージャのパラメータを設定する...


SQL Server/Azure SQL Databaseで「The SELECT permission was denied on the object 'Users'」エラーに直面?原因特定と解決策をわかりやすく解説

SQL Server または Azure SQL Database で "The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'" エラーが発生した場合、これは、対象のユーザーが 'Users' テーブルに対する SELECT 権限を持っていないことを意味します。このエラーは、データベース管理、ユーザー管理、トラブルシューティングなど、様々な場面で発生する可能性があります。...


【MySQL互換性注意】MariaDBでANY_VALUE()関数が使えない理由と解決策

MariaDBはMySQLと互換性のあるオープンソースのデータベース管理システムですが、一部のMySQLの機能はサポートされていません。その一つが、集計関数ANY_VALUE()です。この解説では、MariaDBでANY_VALUE()関数が使用できない理由と、代替案について分かりやすく説明します。...


SQL SQL SQL Amazon で見る



SQL Serverで複数列を一度に変更する方法:ALTER COLUMNコマンド

SQL Serverでテーブル構造を変更する場合、ALTER TABLEコマンドを使用します。このコマンドには、列を追加、削除、変更、名前変更など、さまざまな操作を実行するためのオプションが含まれています。本記事では、ALTER COLUMNオプションを使用して、複数の列を一度に変更する方法について解説します。