2017-09-13 5 views
2

SQL Serverのinformation_schemaテーブルとsysテーブルについて教えてください。彼らの違いは何ですか?SQL Serverでのinformation_schemaとsysテーブルの相違

+0

'information_schema' * views *は、メタデータに対するやや標準化されたインターフェースを提供します。 'sys'テーブル/ビューはSQL Server特有のもので、独自の(完全な)情報を含んでいます。私は基本的な情報のために前者を好む。 –

+1

[カタログビューと情報スキーマビューとDMVのSQL Serverの相違点](https://stackoverflow.com/questions/4195064/sql-server-difference-between-catalog-views-information-schema-views-vs)の可能な複製-Dmvs) –

+0

@ダングズマンあなたに違反はありませんが、そのリンクされた答えは*ひどい*です。 –

答えて

2

両方INFORMATION_SCHEMAsysオブジェクトをSQL Serverで利用可能な両方のメタデータカタログです、ありがとうございました。

INFORMATION_SCHEMA set of viewsは、メタデータのANSI/ISO標準カタログです。ほとんどのRDBMSは、大半のINFORMATION_SCHEMAビューをサポートし、各ビューはベンダーに関係なく本質的に同一の情報を公開します。 SQL Serverでは、ほとんどの場合、INFORMATION_SCHEMAビューのすべてが、一方向または他の方法でsysテーブルに戻るビューです。

返し ​​

CREATE VIEW INFORMATION_SCHEMA.TABLES 
AS 
SELECT 
    DB_NAME()   AS TABLE_CATALOG, 
    s.name    AS TABLE_SCHEMA, 
    o.name    AS TABLE_NAME, 
    CASE o.type 
     WHEN 'U' THEN 'BASE TABLE' 
     WHEN 'V' THEN 'VIEW' 
    END    AS TABLE_TYPE 
FROM 
    sys.objects o LEFT JOIN sys.schemas s 
    ON s.schema_id = o.schema_id 
WHERE 
    o.type IN ('U', 'V') 

sys tables and viewsは、私の知る限り、によって作成されたオリジナルメタデータ・カタログ・ビューとテーブルですSQL Serverでは、次のようなクエリを実行することにより、基本的なビューの定義を見ることができますSybase(MicrosoftがSQL Serverのオリジナルコードベースを購入したベンダー)ほとんどのRDBMSには、カタログ表の同等のセットがありますが、特定の表名はすべてベンダーによって異なります。 SQL Serverでは、これらのテーブルと、後で動的管理ビュー(DMV)を追加することで、システムとユーザーの使用のためにデータベースのメタデータを取得するためにMicrosoftが作成したものです。

INFORMATION_SCHEMAビューは通常sysテーブルを指しており、これらのビューのISO定義のためにthe INFORMATION_SCHEMA views to not contain all metadata or all objects that you're looking forでは珍しくありません。 (個人的には、この記事のAaronの偏見はやや大げさだと思うが、彼はおそらく私が持っている以上に問題に噛まれているだろうし、おそらくもっと複雑なデータベースにも取り組んでいるだろう)。

SELECT OBJECT_DEFINITION(OBJECT_ID('sys.tables')) 

戻り値:はっきり多く、より多くの詳細な情報を返す、とsys.tablesはユーザテーブルのみを返しながら、INFORMATION_SCHEMA.TABLESリターンの両方のユーザーテーブルとビューことがわかりれ

CREATE VIEW sys.tables AS 
    SELECT o.name, o.object_id, o.principal_id, o.schema_id, o.parent_object_id, 
     o.type, o.type_desc, o.create_date, o.modify_date, 
     o.is_ms_shipped, o.is_published, o.is_schema_published, 
     isnull(ds.indepid, 0) AS lob_data_space_id, 
     rfs.indepid AS filestream_data_space_id, 
     o.property AS max_column_id_used, 
     o.lock_on_bulk_load, o.uses_ansi_nulls, o.is_replicated, o.has_replication_filter, 
     o.is_merge_published, o.is_sync_tran_subscribed, o.has_unchecked_assembly_data, 
     lob.intprop AS text_in_row_limit, 
     o.large_value_types_out_of_row, 
     o.is_tracked_by_cdc, 
     o.lock_escalation_option AS lock_escalation, 
     ts.name AS lock_escalation_desc, 
     o.is_filetable, 
     o.is_memory_optimized, 
     o.durability_option as durability, 
     d.name as durability_desc 
    FROM sys.objects$ o 
    LEFT JOIN sys.sysidxstats lob ON lob.id = o.object_id AND lob.indid <= 1 
    LEFT JOIN sys.syssingleobjrefs ds ON ds.depid = o.object_id AND ds.class = 8 AND ds.depsubid <= 1 -- SRC_INDEXTOLOBDS 
    LEFT JOIN sys.syssingleobjrefs rfs ON rfs.depid = o.object_id AND rfs.class = 42 AND rfs.depsubid = 0 -- SRC_OBJTOFSDS 
    LEFT JOIN sys.syspalvalues ts ON ts.class = 'LEOP' AND ts.value = o.lock_escalation_option 
    LEFT JOIN sys.syspalvalues d ON d.class = 'DOPT' AND d.value = o.durability_option 
    WHERE o.type = 'U' 

私はINFORMATION_SCHEMAビューの方がはるかに整理されており、名前によるテーブルの検索や名前による列の検索を非常に簡単に行うことができますが、sysオブジェクトテーブルに行く必要があります。 INFORMATION_SCHEMAビューのオブジェクトが見つからない場合があります。信頼できる完全なアイテムを探している場合は、sysテーブル(具体的にはsys.objectsまたはsys.all_objects)を使用しますが、読み取り可能な結果を​​得るにはさらに多くの作業が必要です。 INFORMATION_SCHEMAビューでは、すでに多くの作業が完了しています。

0

INFORMATION_SCHEMA.TABLESビューを使用すると、データベース内のすべてのテーブルとビューに関する情報を取得できます。デフォルトでは、データベースにあるすべての単一のテーブルとビューについてこの情報が表示されます。すべての重要なメタデータ、データについてのデータが含まれているhttps://www.mssqltips.com/sqlservertutorial/196/informationschematables/

のSysテーブル:

親切にこれを参照してください。このデータには、テーブル名、列名、およびデータ型に関する情報が含まれているため、SQL Serverはクエリを適切に処理して結果セットを返すことができます。システムテーブルには、有効なユーザーとそのアクセス許可に関する情報が含まれているため、データを保護することができ、SQL Serverの構成に関する情報が含まれているため、システムの動作を予測して制御できます。

関連する問題