SQL Serverのinformation_schemaテーブルとsysテーブルについて教えてください。彼らの違いは何ですか?SQL Serverでのinformation_schemaとsysテーブルの相違
は
SQL Serverのinformation_schemaテーブルとsysテーブルについて教えてください。彼らの違いは何ですか?SQL Serverでのinformation_schemaとsysテーブルの相違
は
両方INFORMATION_SCHEMA
とsys
オブジェクトを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
ビューでは、すでに多くの作業が完了しています。
INFORMATION_SCHEMA.TABLESビューを使用すると、データベース内のすべてのテーブルとビューに関する情報を取得できます。デフォルトでは、データベースにあるすべての単一のテーブルとビューについてこの情報が表示されます。すべての重要なメタデータ、データについてのデータが含まれているhttps://www.mssqltips.com/sqlservertutorial/196/informationschematables/
のSysテーブル:
親切にこれを参照してください。このデータには、テーブル名、列名、およびデータ型に関する情報が含まれているため、SQL Serverはクエリを適切に処理して結果セットを返すことができます。システムテーブルには、有効なユーザーとそのアクセス許可に関する情報が含まれているため、データを保護することができ、SQL Serverの構成に関する情報が含まれているため、システムの動作を予測して制御できます。
'information_schema' * views *は、メタデータに対するやや標準化されたインターフェースを提供します。 'sys'テーブル/ビューはSQL Server特有のもので、独自の(完全な)情報を含んでいます。私は基本的な情報のために前者を好む。 –
[カタログビューと情報スキーマビューとDMVのSQL Serverの相違点](https://stackoverflow.com/questions/4195064/sql-server-difference-between-catalog-views-information-schema-views-vs)の可能な複製-Dmvs) –
@ダングズマンあなたに違反はありませんが、そのリンクされた答えは*ひどい*です。 –