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

SQL Serverのsys.columns、sys.system_columns、およびsys.all_columnsの違い

    SQL Serverのシステムカタログビューの3つには、sys.columnsが含まれます。 、sys.system_columns 、およびsys.all_columns

    これらの3つのカタログビューはそれぞれ、データベース内の列に関するメタデータを提供しますが、それらの間には違いがあります。

    それぞれの機能は次のとおりです。

    sys.columns
    ユーザー定義オブジェクトから列を返します。これには、システムベーステーブルの列が含まれます。
    sys.system_columns
    システムオブジェクトから列を返します。
    sys.all_columns
    すべてのユーザー定義オブジェクトとシステムオブジェクトから列を返します。

    つまり、最後のビューは、前の2つのビューの結果を組み合わせたものです。

    次のオブジェクトタイプには列を含めることができます:

    • テーブル値アセンブリ関数(FT)
    • インラインテーブル値SQL関数(IF)
    • 内部テーブル(IT)
    • システムテーブル(S)
    • テーブル値SQL関数(TF)
    • ユーザーテーブル(U)
    • ビュー(V)

    これらのビューによって返される結果の違いを示す例を次に示します。

    USE Music;
    
    SELECT COUNT(*) AS columns
    FROM sys.columns;
    
    SELECT COUNT(*) AS system_columns
    FROM sys.system_columns;
    
    SELECT COUNT(*) AS all_columns
    FROM sys.all_columns;
    

    結果:

    +-----------+
    | columns   |
    |-----------|
    | 1025      |
    +-----------+
    (1 row affected)
    +------------------+
    | system_columns   |
    |------------------|
    | 8982             |
    +------------------+
    (1 row affected)
    +---------------+
    | all_columns   |
    |---------------|
    | 10007         |
    +---------------+
    (1 row affected)
    

    最初の2つのクエリの結果を合計すると、sys.all_columnsと同じ結果が得られます。 :

    USE Music;
    
    SELECT 
    (SELECT COUNT(*) FROM sys.columns) +
    (SELECT COUNT(*) FROM sys.system_columns)
    AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | 10007    |
    +----------+
    

    1. 列を指定せずにSQLINSERTを実行します。何が起こるのですか?

    2. データベースのパフォーマンス調整にはどのようなリソースがありますか?

    3. 2つの日付の間に欠落している日付を挿入するための集計表? SQL

    4. VBA基本クラスと派生オブジェクト-2