SQL Serverで計算列を作成する場合、「永続的」としてフラグを立てるオプションがあります。永続化された計算列は、テーブルに物理的に格納されている列です。永続化するように指定しない場合、列の値は、列に対してクエリを実行するたびに計算されます。
sys.computed_columns
にクエリを実行できます 計算列が永続としてマークされているかどうかを確認するためのシステムカタログビュー。
例1-1つの計算列のチェック
これが私のテスト環境で実行した例です。この場合、TotalValue
という計算列をチェックしています 。
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue';
結果:
+----------------+ | is_persisted | |----------------| | 1 | +----------------+
この場合、列は 持続しました。
同じ名前の計算列が複数ある場合は、テーブル名をWHERE
に追加することもできます。 条項:
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue' AND OBJECT_NAME(object_id) = 'Products';
例2–すべての計算列を返す
この例では、すべての計算列とそのis_persisted
を返します。 値。
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Computed Column], is_persisted FROM sys.computed_columns;
結果:
+----------+-------------------+----------------+ | Table | Computed Column | is_persisted | |----------+-------------------+----------------| | Person | FullName | 0 | | Products | TotalValue | 1 | +----------+-------------------+----------------+
例3–スキーマを含める
この例では、sys.objects
と結合します 結果にスキーマを含めるためのビュー。
SELECT SCHEMA_NAME(o.schema_id) AS [Schema], OBJECT_NAME(cc.object_id) AS [Table], cc.name AS [Computed Column], cc.is_persisted FROM sys.computed_columns cc INNER JOIN sys.objects o ON o.object_id = cc.object_id;
結果:
+----------+----------+-------------------+----------------+ | Schema | Table | Computed Column | is_persisted | |----------+----------+-------------------+----------------| | dbo | Person | FullName | 0 | | dbo | Products | TotalValue | 1 | +----------+----------+-------------------+----------------+