Как мне сопоставить идентификатор в sys.extended_properties с именем объекта - PullRequest
0 голосов
/ 10 мая 2011

Когда мы кодируем наши хранимые проки CRUD, мы добавляем расширенное свойство, которое указывает таблицу, на которой они основаны.Я хочу иметь возможность опросить sys.extended_properties, чтобы получить список процедур, которые зависят от данной таблицы, но extended_properties содержит major_id, который, кажется, не совпадает с object_id в sys.objects или sys.sysobjects,

Какое магическое соединение мне нужно?

Ответы [ 4 ]

3 голосов
/ 10 мая 2011

MSDN для sys.extended_properties описывает и major_id, и minor_id. Контекст зависит от столбца класса.

Теперь major_id = object_id в sys.objects , когда это имеет смысл.

Я использовал это раньше для проверки расширенных свойств, поэтому я знаю, что это работает.

Однако при втором чтении вашего вопроса нет прямой связи между расширенным свойством хранимого процесса и таблицами, которые используются в этом процессе. Чтобы подключиться, вам нужно будет через sys.sql_expression_dependencies , если я вас правильно понимаю

2 голосов
/ 10 мая 2011

Из онлайн-записи книг для sys.extended_properties, major_id = object_id, если class = 1, 2 или 7. Если вы запускаете запрос вручную, каков класс свойства?Я предполагаю, что будет работать следующее:

select object_name([major_id]), [name], [value]
from sys.extended_properties
2 голосов
/ 10 мая 2011

Начиная с MSDN , вы должны изучить поле class, а также major_id.

Если класс равен 0, major_id всегда равен 0.

Если класс равен 1, 2 или 7, Major_id object_id.

Другие классы кажутся недокументированными, и поэтому я бы на них не полагался. Например, класс 5, по-видимому, предназначен для сборок CLR (SqlAssemblyProjectRoot). В моем случае major_id для одной такой сборки - 65673, и в sys.objects для этого идентификатора нет даже несоответствующего объекта.

РЕДАКТИРОВАТЬ: я хотел добавить, что документированные - 1, 2, 7 - соответствуют (1) объект (например, таблица, хранимая процедура) или столбец, (2) параметр, (7) индекс. В вашем случае это должно охватывать то, что вы ищете.

1 голос
/ 10 мая 2011

Непосредственно не отвечая на ваш вопрос, но некоторые дополнительные ресурсы:

У меня есть презентация об использовании встроенных расширенных свойств для таких вещей, как документация: http://code.google.com/p/caderoux/wiki/LeversAndTurtles

Недавно в 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/

...