2011-07-07 3 views
0

Я пытаюсь использовать объекты управления SQL Server (SMO) для извлечения расширенного свойства в индексе, но извлеченный объект SMO имеет пустую коллекцию ExtentedProperties. (Индекс находится в таблице.) Расширенное свойство есть, я проверил в T-SQL. Кроме того, расширенные свойства, например. по объекту базы данных находятся в SMO. Все, что я делаюSMO не извлекает расширенные свойства для индекса

Server s = new Server(<connectionObj>); 
Database db = s.Databases[<databaseName>]; 
int extCount = db.Tables[<tableName>] 
       .Indexes[<indexName>] 
       .ExtendedProperties 
       .Count 

Чтобы получить

extCount == 0 

Я делаю что-то неправильно?

Приветствия,

Тильман

PS: Это SQL Server 2005

+0

Ваш код выглядит правильно. Вы на 100% уверены, что ваш индекс имеет определенные расширенные свойства? –

+0

Спасибо, я просто дважды проверил так, чтобы выбрать * из fn_listextendedproperty ('MS_Description', 'SCHEMA', 'dbo', 'TABLE', 'T3_Index', 'INDEX', 'PK_T3_Index') и свойство существует. – user812775

ответ

4

Вам необходимо обновить коллекции, прежде чем вы можете ссылаться на свои объекты по имени - я знаю, - это странно.

Try:

Server s = new Server(<connectionObj>); 
Database db = s.Databases[<databaseName>]; 
db.Tables.Refresh(); 
db.Tables[<tableName>].Indexes.Refresh(); 
int extCount = db.Tables[<tableName>] 
       .Indexes[<indexName>] 
       .ExtendedProperties 
       .Count 
0

Ваш код правильный, я подозреваю, что ваш тип индекса IndexKeyType.DriPrimaryKey для этого индекса и SMO ​​по какой-то странной причине получает расширенные свойства от первичного ключа объекта индекса поддерживает, а не от самого индекса. Вы можете видеть, что если вы запустите свой код в SQL Profiler.

Смежные вопросы