この記事では、T-SQLを使用して既存の列をSQLServerの計算列に変更する方法を示します。
計算列 式を使用してその値を計算する仮想列です。式は通常、他の列のデータを使用します。計算列は、PERSISTED
とマークされていない限り、テーブルに物理的に保存されません。 。
例1-計算列なしでテーブルを作成する
まず、なしでテーブルを作成しましょう 計算列。
CREATE TABLE Person ( PersonID int IDENTITY (1,1) NOT NULL, FirstName varchar(70), LastName varchar(70), FullName varchar(140) ); INSERT INTO Person (FirstName, LastName, FullName) VALUES ('Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer'); SELECT * FROM Person;
結果:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
データを挿入すると、倍増していることがわかります。フルネームは名と姓の組み合わせであり、すべての行についてこのデータを再入力しています。
これにより、テーブルの更新時に問題が発生する可能性もあります。誰かがファーストネームまたはセカンドネームを変更した場合は、必ず2つの列を更新する必要があります(両方を変更した場合は3つの列)。
これは、計算列の候補として適しています。
例2–列を計算列に変更する
列を計算列に変更するには、最初に列を削除してから、新しい定義で列を作成する必要があります。
FullName
を変更する方法は次のとおりです 列を計算列に変換します。
ALTER TABLE Person DROP COLUMN FullName; ALTER TABLE Person ADD FullName AS (CONCAT(FirstName, ' ', LastName));
FullName
という列を「変更」しました 計算列に。 FirstName
を連結します およびLastName
列。
テーブルの内容を選択すると、次のようになります。
SELECT * FROM Person;
結果:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
例3–値を更新する
ここで、FirstName
の値が更新された場合 またはLastName
列の場合、これは計算列によって返される値に影響します。 2列で更新する必要はありません。
例:
UPDATE Person SET LastName = 'Bourne' WHERE PersonId = 3; SELECT * FROM Person;
結果:
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Bourne | Marge Bourne | +------------+-------------+------------+----------------+