sql >> データベース >  >> RDS >> Sqlserver

SQL Serverで既存の列を計算列に変更する(T-SQLの例)

    この記事では、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   |
    +------------+-------------+------------+----------------+
    

    1. カンマ区切りの列で特定の値を照会することはできますか?

    2. Oracleでテーブルを更新する方法

    3. MySQLエラーコード:MySQLWorkbenchでのUPDATE中の1175

    4. MariaDBでのDATE_FORMAT()のしくみ