SQL Serverでは、計算列 式を使用してその値を計算する仮想列です。
計算列は通常、他の列のデータを計算に使用します。これらの列のいずれかのデータが更新されると、計算された列はその更新を計算に自動的に反映します。
計算列の例
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
この例では、FullName
columnは計算列です。 FirstName
の値を連結します およびLastName
フルネームを計算するための列。
計算列がない場合、フルネームを選択する場合は、次のようにする必要があります。
SELECT FirstName + ' ' + LastName AS FullName FROM Person;
または、CONCAT()
を使用することもできます このような機能:
SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Person;
テーブルからフルネームを選択するたびに、クエリに連結を含める必要があります。
ただし、上記のような計算列を使用すると、次のことが可能になります。
SELECT FullName FROM Person;
計算列の利点
計算列は、クエリを作成する時間を節約し、エラーを減らし、さらにはパフォーマンスを向上させることができます。
計算列は、同じクエリを何度も繰り返し実行する場合、特にそのクエリがめったに変更されないビジネスルールに基づいている場合に便利です。
前の例の計算列は、誰かのフルネームを選択するたびに名前と名前を連結する必要がないため、将来的に多くの時間を節約できます。
ユースケースの例
計算列が役立つ場合の例は次のとおりです。
- 別の列の生年月日に基づいて、人の年齢を計算する
- ある列にある名と別の列にある姓に基づいて、名と名前を連結する
- 1つの列の在庫数と別の列の価格に基づいて、製品の在庫値を計算します
- 別の列の身長と体重に基づいて、人のBMI(ボディマス指数)を計算します
- 他の列の値に基づいて行をランク付けする「ランク」列を作成する
- 他の列の開始時間と終了時間に基づいて、マラソンランナーのレース時間を計算します
計算列の永続性
計算列は、PERSISTED
とマークされていない限り、テーブルに物理的に保存されません。 。
そうでない場合 永続化された計算列の場合、テーブルにアクセスするたびに計算が行われます。
の場合 永続化された計算列の場合、計算値は物理的にテーブルに格納されます。つまり、クエリを実行するたびにその値を計算する必要はありません。データがその値を取得する列の1つで更新されると、計算された列の値が更新され、テーブルに格納されます。これはパフォーマンスに役立ちます。
計算列は、決定論的である場合にのみ永続化できることに注意してください。決定論的でない場合、それを永続化しようとするとエラーが発生します。
非決定論的 列は、同じ入力でも異なる値を返す列です。たとえば、計算に現在の日付を使用する場合、値は毎日異なり、非決定的と見なされます。
単に名と名前を連結している場合、それは決定論的であり、そのような列を永続化することができます。
計算列の作成
計算列は、SSMSGUIまたはTransact-SQLを使用して作成できます。
SSMSの場合
SSMSでは、 Table Designerにいる間 、計算列にしたい列を作成し(または、すでに存在する場合は単に選択します)、[列のプロパティ]の下に配置します。 タブで、数式を計算列の仕様に入力します プロパティフィールド。
計算列にデータ型を指定する必要はありません。SQLServerは、数式に基づいて列にデータ型を指定します。
はいを選択することもできます は永続化されます ご希望の場合。
T-SQLの使用
Transact-SQLを使用して計算列を作成する例については、T-SQLを使用してSQLServerで計算列を作成するを参照してください。