sql >> データベース >  >> RDS >> Sqlserver

列がSQLServerの計算列であるかどうかを確認する3つの方法

    この記事では、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             |
    +---------------+
    

    1. SQLServerで現在の日時から過去7日間までの過去7日間のデータを取得する方法

    2. スキーマスナップショットを使用したデータベースの複数のバージョンの作成と展開

    3. varchar(8000)よりもvarchar(500)の方が有利ですか?

    4. MySQL –接続エラー– [MySQL] [ODBC 5.3(w)ドライバー]ホスト「IP」はこのMySQLサーバーへの接続を許可されていません