【问题标题】:SMO doesn't retrieve extended properties for indexSMO 不检索索引的扩展属性
【发布时间】:2011-09-30 10:02:08
【问题描述】:

我正在尝试使用 SQL Server 管理对象 (SMO) 检索索引上的扩展属性,但检索到的 SMO 对象有一个空的 ExtentedProperties 集合。 (索引在表上。)扩展属性在那里,我在 T-SQL 中检查。此外,扩展属性,例如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

【问题讨论】:

  • 您的代码看起来正确。您是否 100% 确定您的索引实际上定义了一些扩展属性?
  • 谢谢,我只是仔细检查过,所以 select * from fn_listextendedproperty ('MS_Description', 'SCHEMA', 'dbo', 'TABLE', 'T3_Index', 'INDEX', 'PK_T3_Index') 和该属性存在。

标签: .net sql-server smo extended-properties


【解决方案1】:

您需要刷新集合,然后才能按名称引用它们的项目 - 我知道 - 这很奇怪。

试试:

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

【讨论】:

    【解决方案2】:

    您的代码是正确的,我怀疑您的索引类型是该索引的 IndexKeyType.DriPrimaryKey,而 SMO 出于某种奇怪的原因从索引支持的主键对象而不是索引本身获取扩展属性。如果您在 SQL Profiler 中运行代码,您会看到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多