9

ここでのSQLServerのドキュメントには、のtable_schemaフィールドinformation_schema.tablesは「信頼できない」と記載されており、オブジェクトのスキーマを取得する正しい方法はクエリを実行することsys.objectsです。

によって報告されたスキーマがいつどのように正しくない可能性があるかについて誰かが詳しく説明できますか?information_schema.tables

4

1 に答える 1

16

これが答えられず、コメントしただけで、部分的にrep greeedから外れ、さらに重要なことに、答えられていないキューからそれを取り除くのは残念です。答えにいくつかのポイントを投げます。

  1. ドキュメントの文言は正確ではなく、修正中です(Connect#686118を参照)。2005、2008、2008 R2のドキュメントを一度に修正するのか、それとも古いバージョンが更新されるのかはわかりません。重要なのは、どちらのビューのスキーマも正しくない場合を想像することはできないということですが、それ以上に、info_schemaが正しくないのに正しくないということですsys.objects。後者は不可能です。info_schemaビューは完全にビューに基づいているためsys.objects(を見てくださいSELECT OBJECT_DEFINITION (OBJECT_ID ('INFORMATION_SCHEMA.TABLES'));)、一方が正しくない場合は、両方とも正しくありません。おそらく、両方が正しくない可能性があるが、現在のバージョンではそうではないというあいまいなケースがあります(たとえば、SQLServer2000ではconfigオプションを使用しますallow updates有効にして、オブジェクトを所有しているユーザーをsysusersから削除します-今日はあまり関連性がなく、可能ではなく、私が試してみたいものではありませんが、いつでも現在の言葉遣いを動機付けたと想像できるのはそれだけです)。

  2. 一般に、INFORMATION_SCHEMASQL Server 2005で導入された(そしてそれ以降拡張された)カタログビューを優先して、ビューを回避する必要があります。なんで?新しい機能がSQLServerに追加されるにつれてカタログビューは開発され続けますが、info_schemaビューは開発されていないためです。コメントで述べたように、info_schemaでフィルター処理されたインデックスに関する情報を見つけてください。含まれる列、XMLインデックス、ID /計算列、一意のインデックスに対する外部キーについても同じことが言えます。これらはすべて完全に欠落しているか、info_schemaビューで異なって表示されます。デナリでは、シーケンスのinfo_schemaビューを追加しましたが、これも標準の最低限を満たし、SQL Server固有の実装の詳細に関する情報(たとえば、使い果たされているかどうかなど)は含まれていません。また、将来的に新しい機能が追加された場合は、info_schemaビューがループに保持されないことを確認できます)。info_schemaビューに固執する唯一のケースは、(a)info_schema準拠のプラットフォーム間で機能する必要があるメタデータルーチンを作成している場合です。および(b)見逃されるプラットフォーム固有の機能を使用していない。マルチプラットフォームのベンダーツールを除けば、これはおそらく非常にまれなシナリオです(その場合でも、それらの機能を使用していてツールがそれらを選択しなかった顧客を不快にさせる可能性があります)。

  3. 私は別のConnect提案(Connect#686121INFORMATION_SCHEMA )を提出し、BooksOnlineのすべてのビュートピックでこの不完全性について警告を出しました。SQL Serverからメタデータを取得するための好ましい方法ではないことはあまり知られていないと思います。また、これが表示されないことで人々を非難する可能性があります。結局のところ、標準に準拠した方法を使用することは「ベストプラクティス」と独自の方法の使用は反対です。多くのデータベースと同様に、「状況によって異なります」が、多くの場合、sys標準に共通のSQLServerの機能のみを使用しているというまれなシナリオでない限り、カタログビュー。これが当てはまるような状況で単一のインスタンスに出くわしたことはないと思いますが、それらが存在する場合は、それを知ってうれしく思います。

私はINFORMATION_SCHEMAここの信頼性の低さについてもブログに書いています:

于 2011-09-05T16:40:18.253 に答える