次の方法で共有


テーブル内の計算列を指定する

計算列は、列が PERSISTED とマークされていない限り、テーブルに物理的に格納されない仮想列です。 計算列の式は、他の列のデータを使用して値を計算し、それを自身の列に格納します。 SQL Server Management Studio または Transact-SQL を使用して、SQL Server 2014 の計算列の式を指定できます。

このトピックについて

開始する前に

制限事項と制約条件

  • 計算列は、DEFAULT 制約、FOREIGN KEY 制約、または NOT NULL 制約の定義として使用することはできません。 ただし、計算列の値が決定論的な式によって定義され、結果のデータ型がインデックス列で許可されている場合、計算列はインデックスのキー列として、または PRIMARY KEY 制約または UNIQUE 制約の一部として使用できます。 たとえば、テーブルに整数列 a と b がある場合、計算列 a + b にインデックスを付けることができますが、計算列 a + DATEPART(dd, GETDATE()) のインデックスを作成することはできません。これは、後続の呼び出しで値が変更される可能性があるためです。

  • 計算列を INSERT ステートメントまたは UPDATE ステートメントのターゲットにすることはできません。

安全

権限

テーブルに対する ALTER 権限が必要です。

SQL Server Management Studio の使用

新しい計算列を追加するには

  1. オブジェクト エクスプローラーで、新しい計算列を追加するテーブルを展開します。 [列] を右クリックして [新しい列]をクリックします。

  2. 列名を入力し、既定のデータ型 (nchar(10)) をそのまま使用します。 データベース エンジン により、計算列のデータ型は、数式で指定された式のデータ型のうち優先順位が高い方になります。 たとえば、数式が money 型の列と int型の列を参照している場合、そのデータ型の方が優先順位が高いため、計算列は money 型になります。 詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。

  3. [列のプロパティ] タブの [計算列の指定] プロパティを展開します。

  4. [(数式)] 子プロパティで、列の式を右側のグリッド セルに入力します。 たとえば、 SalesTotal 列に SubTotal+TaxAmt+Freightという数式を入力した場合、テーブル内の各行のこれらの列の値が加算されます。

    重要

    数式でデータ型が異なる 2 つの式を結合すると、データ型の優先順位の規則によって、優先順位の低いデータ型を優先順位の高いデータ型に変換することが指定されます。 変換がサポートされている暗黙的な変換でない場合は、エラー "Error validating the formula for column column_name." が返されます。 CAST または CONVERT 関数を使用して、データ型の競合を解決します。 たとえば、nvarchar型の列をint型の列と組み合わせる場合は、この数式('Prod'+CONVERT(nvarchar(23),ProductID))に示すように、整数型をnvarcharに変換する必要があります。 詳細については、「 CAST および CONVERT (Transact-SQL)」を参照してください。

  5. [永続化された子プロパティ] のドロップダウンから [ はい ] または [いいえ ] を選択して、データを 永続化 するかどうかを指定します。

  6. [ファイル] メニューの [<テーブル名> を保存] をクリックします。

計算列の定義を既存の列に追加するには

  1. オブジェクト エクスプローラーで、変更する列が含まれているテーブルを右クリックし、 [列] フォルダーを展開します。

  2. 計算列の数式を指定する列を右クリックし、[削除] をクリック しますOK をクリックします。

  3. 前の手順に従って、新しい列を追加し、計算列の数式を指定して、新しい計算列を追加します。

Transact-SQL の使用

テーブルの作成時に計算列を追加するには

  1. データベース エンジンに接続します。

  2. [標準] バーから、新しいクエリをクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[ 実行] をクリックします。 この例では、 QtyAvailable 列の値と UnitPrice 列の値を乗算する計算列を持つテーブルを作成します。

    CREATE TABLE dbo.Products   
    (  
        ProductID int IDENTITY (1,1) NOT NULL  
      , QtyAvailable smallint  
      , UnitPrice money  
      , InventoryValue AS QtyAvailable * UnitPrice  
    );  
    
    -- Insert values into the table.  
    INSERT INTO dbo.Products (QtyAvailable, UnitPrice)  
    VALUES (25, 2.00), (10, 1.5);  
    
    -- Display the rows in the table.  
    SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue  
    FROM dbo.Products;  
    
    

新しい計算列を既存のテーブルに追加するには

  1. データベース エンジンに接続します。

  2. [標準] バーから、新しいクエリをクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、[ 実行] をクリックします。 次の例では、前の例で作成したテーブルに新しい列を追加します。

    ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.35);  
    
    

既存の列を計算列に変更するには

  1. データベース エンジンに接続します。

  2. [標準] バーから、新しいクエリをクリックします。

  3. 既存の列を計算列に変更するには、計算列を削除して再作成する必要があります。 次の例をコピーしてクエリ ウィンドウに貼り付け、[ 実行] をクリックします。 次の例では、前の例で追加した列を変更します。

    ALTER TABLE dbo.Products DROP COLUMN RetailValue;  
    GO  
    ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);  
    
    

    詳細については、ALTER TABLE (Transact-SQL)を参照してください。