SQL Serverには、データベース内の計算列のリストを取得できるシステムカタログビューがいくつかあります。
これらのビューの1つは、sys.computed_columns
と呼ばれます。 。もう1つはsys.columns
です 。
sys.computed_columnsビュー
sys.computed_columns
システムカタログビューには、データベース内の計算列ごとに1つの行が含まれます。したがって、簡単なクエリを実行して、計算列のリストを取得できます。
SELECT OBJECT_NAME(object_id) AS [Parent], name AS [Computed Column], definition, is_persisted FROM sys.computed_columns;
結果:
+----------+-------------------+--------------------------------------+----------------+ | Parent | Computed Column | definition | is_persisted | |----------+-------------------+--------------------------------------+----------------| | Person | FullName | (concat([FirstName],' ',[LastName])) | 0 | | Products | TotalValue | ([Quantity]*[Price]) | 1 | +----------+-------------------+--------------------------------------+----------------+
このビューの列のほとんどは、sys.columns
から継承されています 見る。ここにはほんの一握りしか含まれていません。
sys.columns
に対するこのビューの利点の1つ は、計算された列の定義を返すことです。これは、状況によっては役立つ場合があります。 is_persisted
も含まれます フラグ。計算列が永続化されているかどうかを示します。列が永続化されている場合、列の計算値は物理的にテーブルに格納されます。そうでない場合は、列をクエリするときに計算されます。
sys.columnsビュー
sys.columns
に対してクエリを実行することもできます 計算列を返します。これを行う場合は、計算された列のみを含めるように結果をフィルタリングする必要があります。これはWHERE
で行うことができます is_computed
の句 列。
例:
SELECT OBJECT_NAME(object_id) as Parent, name AS [Computed Column] FROM sys.columns WHERE is_computed = 1;
結果:
+----------+-------------------+ | Parent | Computed Column | |----------+-------------------| | Person | FullName | | Products | TotalValue | +----------+-------------------+
このビューにはdefinition
が含まれていません 、is_persisted
、またはuses_database_collation
sys.computed_columns
の列 含む。