【发布时间】:2012-07-05 02:10:21
【问题描述】:
我有一个名为PersonOverview 的视图,它有一堆列;这是一个完全正常的视图,没什么特别的。
我使用该视图的DatenbereichCD 列添加了一个名为FlexGridHide 的扩展属性,其值为1。
EXEC sys.sp_addextendedproperty
@name = N'FlexGridHide',
@value = N'1',
@level0type = N'SCHEMA', @level0name = dbo,
@level1type = N'VIEW', @level1name = vPersonOverview,
@level2type = N'COLUMN', @level2name = DatenbereichCD;
我可以在 SQL Server 中找到该扩展属性 - 没问题 - 它就在那里。
但是当我将视图中的数据加载到DataTable 中时,我显然无法真正读出该扩展属性:
string sqlSelect = @"SELECT TOP 5 DatenbereichCD FROM dbo.vPersonOverview";
DataTable personUebersicht = new DataTable();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString))
using (SqlCommand cmd = new SqlCommand(sqlSelect, con))
using (SqlDataAdapter dap = new SqlDataAdapter(cmd))
{
dap.Fill(personUebersicht);
}
DataColumn datenbereichCD = personUebersicht.Columns["DatenbereichCD"];
int extendedProps = datenbereichCD.ExtendedProperties.Count;
连接工作得很好,查询执行得很好,按预期返回五行,列存在,一切似乎都很好 - 除了我在ExtendedProperties 集合中没有任何值 - @987654329 @ 始终为 0。
有什么想法吗?我能做些什么来真正获取这些扩展属性吗?连接字符串参数或SqlCommand 上的属性或什么晦涩难懂的东西?
更新:对于未经训练的无知者,在 SQL Server 列上具有 Extended Properties,在 ADO.NET DataColumn 类型上具有 Extended Properties,这表明这些 SQL Server 扩展属性将是加载到 ADO.NET 扩展属性中 - 但事实似乎并非如此 - 嗯.....
正如 Kevin 建议的那样,我最终使用了第二个查询 - 但由于我需要获取表和视图的扩展属性,并且您必须使用 @987654334指定您要查找的内容@ 函数,我选择查询 sys.extended_properties 系统目录视图以获取我需要的信息。这是我用来从 SQL Server 获取有关扩展属性的信息的查询:
SELECT
ep.class, ep.class_desc, ep.name, ep.value,
SchemaName = s.name,
ObjectName = o.name,
ColumnName = c.Name,
ObjectType = o.type,
ObjectTypeDesc = o.type_desc
FROM sys.extended_properties ep
INNER JOIN sys.objects o ON ep.major_id = o.object_id
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN sys.columns c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
【问题讨论】:
-
我知道这不是最优的,但是您是否考虑过使用 fn_listextendedproperty 表函数?
-
@AaronBertrand:愿意将此作为“连接”问题发布给 Microsoft 吗?他们似乎听你的 - 反正比我听的多:-)
标签: sql-server-2008 ado.net extended-properties