0

CRUD ストアド プロシージャをコード生成するときに、基になっているテーブルを示す拡張プロパティを追加します。sys.extended_properties特定のテーブルに依存するprocのリストを取得するために問い合わせできるようにしたいのですが、またはextended_propertiesのobject_idと同じではないように見えるmajor_idを保持しています。 sys.objectssys.sysobjects

必要なマジック ジョインとは何ですか?

4

4 に答える 4

3

sys.extended_propertiesのMSDNには、major_idとminor_idの両方が記述されています。コンテキストはクラス列によって異なります。

意味がある場合は、 sys.objectsのmajor_id=object_idになります。

以前にこれを使用して拡張プロパティをテストしたことがあるので、機能することがわかります。

ただし、質問を2回目に読むと、ストアドプロシージャの拡張プロパティと、プロシージャで使用されるテーブルとの間に直接のリンクはありません。私があなたを正しく理解していれば、接続するにはsys.sql_expression_dependenciesを経由する必要があります

于 2011-05-10T16:43:03.210 に答える
2

MSDNから、classフィールドだけでなくを調べる必要がありますmajor_id

クラスが0の場合、major_idは常に0です。

クラスが1、2、または7の場合、major_idはobject_idです。

他のクラスは文書化されていないようで、そのため私はそれらに依存しません。たとえば、クラス5はCLRアセンブリ(SqlAssemblyProjectRoot)用のようです。私の場合、そのようなアセンブリの1つは65673であり、そのIDmajor_idに不一致のオブジェクトすらありません。sys.objects

編集:文書化されたもの(1、2、7)が(1)オブジェクト(テーブル、ストアドプロシージャなど)または列、(2)パラメータ、(7)インデックスに対応することを追加したいと思います。あなたの場合、それはあなたが探しているものをカバーするべきです。

于 2011-05-10T16:43:01.687 に答える
2

sys.extended_propertiesの書籍のオンラインエントリから、クラス= 1、2、または7の場合、major_id = object_id。手動クエリを実行する場合、プロパティのクラスは何ですか。私の推測では、次のように機能します。

select object_name([major_id]), [name], [value]
from sys.extended_properties
于 2011-05-10T16:43:43.160 に答える
1

あなたの質問に直接答えるわけではありませんが、いくつかの追加リソース:

ドキュメントなどに組み込みの拡張プロパティを使用する方法についてのプレゼンテーションがあります: http://code.google.com/p/caderoux/wiki/LeversAndTurtles

また、Adam Aspin による拡張プロパティに関する最近の一連の記事が SQLServer Central で公開されています。

http://www.sqlservercentral.com/articles/Metadata/72607/

http://www.sqlservercentral.com/articles/Metadata/72608/

http://www.sqlservercentral.com/articles/Metadata/72609/

http://www.sqlservercentral.com/articles/Metadata/72610/

于 2011-05-10T18:16:36.713 に答える