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

SQLServerの計算列のリストを返す

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


    1. JDBC仕様は「?」を防止しますか? (引用符の外で)演算子として使用されることから?

    2. Postgresでロックを保持しているクエリを検出するにはどうすればよいですか?

    3. T-SQLでパーセント記号をエスケープするにはどうすればよいですか?

    4. 'MySql.Data.MySqlClient'ADO.NETプロバイダーのEntityFrameworkプロバイダーが見つかりません