この記事では、T-SQLを使用して、列がSQLServerの計算列であるかどうかを確認する3つの方法を紹介します。
これは、列名はわかっているが、それが計算列かどうかわからない場合に使用します。
COLUMNPROPERTY()関数
COLUMNPROPERTY()
関数は、指定された列に関する情報を返します。
この関数によって引数として受け入れられるプロパティの1つは、IsComputed
と呼ばれます。 。列が計算される場合は1を取得し、計算されない場合は0を取得します。
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
結果:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
この場合、TotalValue
かどうかを確認しました columnは計算列であり、結果は1
です。 、これは計算列であることを意味します。
sys.computed_columnsシステムカタログビュー
sys.computed_columns
システムカタログビューには、データベース内の計算列ごとに1つの行が含まれます。したがって、このビューをクエリして、列が計算されているかどうかを確認できます。
SELECT is_computed AS [Computed Column?] FROM sys.computed_columns WHERE name = 'TotalValue';
結果:
+--------------------+ | Computed Column? | |--------------------| | 1 | +--------------------+
テーブル名しかわからない場合にも、このビューを使用できます。列の名前がわからないが、テーブルかどうかを調べようとしているだけの場合 計算列が含まれている場合は、次のようにすることができます:
SELECT name AS [Computed Column] FROM sys.computed_columns WHERE object_id = OBJECT_ID('dbo.Products');
結果:
+-------------------+ | Computed Column | |-------------------| | TotalValue | +-------------------+
この場合、テーブル名がProducts
であることがわかりました。 、OBJECT_ID()
を使用しました IDを取得し、それをobject_id
と照合します 列(列が属するオブジェクトのID)
これらの例では、1つの列のみを返します。他のビューと同様に、必要な数の列を返すことができます。このビューの列の1つには、計算された列の定義が含まれています。これがすべての列を返すクエリです。
SELECT * FROM sys.computed_columns WHERE name = 'TotalValue';
結果(垂直出力を使用):
object_id | 814625945 name | TotalValue column_id | 5 system_type_id | 60 user_type_id | 60 max_length | 8 precision | 19 scale | 4 collation_name | NULL is_nullable | 1 is_ansi_padded | 0 is_rowguidcol | 0 is_identity | 0 is_filestream | 0 is_replicated | 0 is_non_sql_subscribed | 0 is_merge_published | 0 is_dts_replicated | 0 is_xml_document | 0 xml_collection_id | 0 default_object_id | 0 rule_object_id | 0 definition | ([Quantity]*[Price]) uses_database_collation | 1 is_persisted | 1 is_computed | 1 is_sparse | 0 is_column_set | 0 generated_always_type | 0 generated_always_type_desc | NOT_APPLICABLE encryption_type | NULL encryption_type_desc | NULL encryption_algorithm_name | NULL column_encryption_key_id | NULL column_encryption_key_database_name | NULL is_hidden | 0 is_masked | 0 graph_type | NULL graph_type_desc | NULL
sys.columnsシステムカタログビュー
sys.computed_columns
ビューは実際にはそのis_computed
を継承します sys.columns
の列(および他の列の束) 。したがって、sys.columns
を使用することもできます 列が計算列であるかどうかを確認します。
SELECT is_computed FROM sys.columns WHERE name = 'TotalValue';
結果:
+---------------+ | is_computed | |---------------| | 1 | +---------------+