SQLShack (日本語)
この記事では、既存のテーブルからSQL削除列のプロセスを調査します。また、制約とオブジェクトが定義された列を削除した場合の影響についても理解します。
はじめに
リレーショナルデータベースでは、スキーマ設計手法の正規化を使用して、大きなテーブルを分割します。小さなテーブルに。データの冗長性と依存性を減らすのに役立ちます。次の画像で指定されている複数の正規化フォームがあります。
この記事では、正規化手法については説明しません。記事「SQLServerのデータベースの正規化とは」を参照できますか?
複数の列を持つ既存のテーブルがあるとします。この表には、現在は関係のない特定の列があります。これらの列は必要ありません。たとえば、製品テーブルについて考えてみます。このテーブルには、列があります。製品のフィードバックを取得するために別のメカニズムを実装しましたが、この列は現在は関係ありません。
SQLテーブルから不要な列を削除することが不可欠である理由を理解しましょう。以下は私のテーブル構造であり、データ型varchar(2000)の列を削除する必要があります。
このテーブルには400万が含まれています行を入力し、ユーザーがコマンドを実行して、このテーブルからすべてのレコードを選択しました。
1
|
SELECT * FROM Products;
|
実際の実行プランをキャプチャします(CTRL + Mを押します)このクエリとクライアント統計の組み合わせ(Shift + Alt + Sを押します)。
別のクエリウィンドウで、列なしでクエリを実行し、同様の統計をキャプチャします。
1
2
3
4
|
SELECT
、
、
FROM ..
|
SSMSでの両方のクエリの実際の実行プランを比較してみましょう。列のないクエリを使用すると、パフォーマンスが向上することがわかります。コンパイルされたメモリの値が低く、CPU時間、待機回数が減少していることがわかります。
クエリオプティマイザとSQLデータベースエンジンは、この列からデータを取得するのは役に立ちませんが、この列に追加の作業を行う必要があります。
同様に、両方のクエリのクライアント統計を比較します。サーバーから受信したTDSパケットが大幅に減少していることがわかります。クライアントに送信されたバイト数、サーバーから受信されたバイト数、クライアントの処理時間、および列を含まないクエリの合計処理時間。また、ネットワーク帯域幅を節約するのにも役立ちます。
ここでは、データベースのクリーンアップを実行し、不要な列を削除して、クエリのパフォーマンスも向上させる必要があります。
既存のSQLテーブルから列を削除する方法を見てみましょう。
SSMSオブジェクトエクスプローラーを使用したSQLDELETE列
グラフィカルユーザーを使用して列を削除できますSQL Serverのインターフェイス(GUI)メソッド。 SSMSのインスタンスに接続し、データベースを展開します。特定のデータベースで、特定のテーブルを見つけて列を展開します。
特定のテーブルのすべての列が表示されます。次の画像に示すように、削除する列を右クリックして[削除]をクリックします。
開きます。ウィンドウが表示され、削除する列名が一覧表示されます。 [OK]をクリックすると、テーブルから列が削除されます。
SSMSテーブルデザイナを使用したSQLDELETE列
SSMSのテーブルデザイナを使用して、必要な列、データ型、および主キー、ID列などの列プロパティを定義します。これを使用して、既存のテーブルから列を削除することもできます。
テーブルを右クリックして、[デザイン]に移動します。
特定のテーブルのすべての列を表示します。
列の左側を右クリックすると、[列の削除]オプションが表示されます。それをクリックして列を削除します。
CTRL + Sを押して保存するか、テーブルデザイナーを閉じて次のウィンドウで[はい]をクリックします。
SQL T-SQLテーブルデザイナを使用した列の削除
[テーブルの変更]コマンドを使用して列を削除することもできます。構文は簡単に使用できます。次のコマンドは、テーブルから列を削除します。
1
2
3
4
|
USE
GO
ALTERTABLE。 DROP COLUMN
GO
|
- まず、削除する列を含むテーブル名を指定します
- 次に、削除する列の名前を指定します
複数削除することもできます単一のAltertableコマンドの列。ただし、すべての列は単一のテーブルに属している必要があります。このコマンドは、1つのコマンドで列を削除します。
1
2
3
4
|
USE
GO
ALTERテーブル 。 DROP COLUMN、
GO
|
SQLDELETE列にCHECK制約が含まれています
CHECK制約を使用して、列の値の範囲を制限します。 CHECK制約のある列があるとします。
列を削除したいのですが、この列にはCHECK制約があります。削除してみましょう。
1
2
|
ALTERTABLE。 DROP COLUMN ProductPrice
GO
|
オブジェクトCK_Price_Checkが列に依存しているというエラーメッセージが表示されます。
この列は、依存関係があるまで削除できません。その中のオブジェクト。この列を削除するには、まず依存関係を削除してから、列を削除します。
テーブルデザイナを使用して、CHECK制約のある列を削除してみましょう。テーブルのテーブルデザイナーを開きます。
列を右クリックして、このテーブルにCHECK制約が存在することを確認します。
Itは、次の画像のようにCHECK制約を示しています。
ここで、列を右クリックして列を削除します。エラーメッセージは表示されません。
デザイナウィンドウを閉じると、変更を保存するために[はい]をクリックするように求められます。
検証警告メッセージを表示し、チェック制約に関するメッセージを表示します。
[はい]をクリックすると、テーブルの変更に失敗します。 CHECK制約が列に依存しているため、列を削除できません。
列の場合、テーブルデザイナを使用して列を削除することはできません。他のオブジェクトに依存します。
SQLビューが定義されたSQLDELETE列
テーブルからすべてのレコードを選択するSQLビューを作成しましょう。
1
2
3
|
ビューの作成vw_ProductSales
as
SELECT * from ProductSales
|
このビューは、テーブルのすべての列に依存します。 Altertableコマンドを使用して列を削除します。
1
2
|
ALTERTABLE。 DROP COLUMN ProductPrice
GO
|
クエリの実行時にエラーメッセージは表示されません。ビューからレコードにアクセスしてみましょう。
1
2
|
SELECT *
FROM vw_ProductSales;
|
テーブルに含まれていないため、エラーメッセージが表示されます列。この列は、SQLビューを作成すると使用可能になりました。
-
注:列を削除する前に、オブジェクトの依存関係を確認する必要があります。後で直面する問題が解消されます。
結論
この記事では、SQLについて学習しました。を使用して既存のテーブルから列を削除します。さまざまな方法。これらすべての方法に注意する必要があります。列を削除する前に、実稼働環境で注意する必要があります。すべての依存関係を削除し、適切に計画する必要があります。
- 作成者
- 最近の投稿
彼は、SQL Server Always On可用性グループに関する50部構成のシリーズで、単一のトピックに関する記事の最大の無料オンラインコレクションの1つを作成しています。 SQL Serverコミュニティへの貢献に基づいて、彼はSQLShackで2020年と2021年に継続的に名誉ある「年間最優秀著者」を含むさまざまな賞を受賞しています。
Rajは常に新しい課題に関心を持っているため、コンサルティングが必要な場合は彼の著作で取り上げられている主題についてのヘルプは、rajendra.gupta16 @ gmail.comに連絡できます。
RajendraGuptaによるすべての投稿を表示
- AWSのマイナーバージョンとメジャーバージョンのアップグレードの実行RDS SQLServer- 2021年1月29日
- AWS RDSPostgreSQLインスタンスのデプロイ-2021年1月27日
- AWSDMSを使用したオンプレミスSQLデータベースのAWSRDS SQLServerへの移行-1月25日、2021