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の列 含む。