【问题标题】:SQL Server 2008 View Columns match to underlying Table ColumnsSQL Server 2008 视图列与基础表列匹配
【发布时间】:2011-02-10 04:03:25
【问题描述】:

我一直在尝试编写一些 SQL 代码,当提供视图时,这些代码将定位视图列引用的列,并确定这些列上是否有任何索引。最终目标是为用户提供在查询视图时可以使用的列列表。

目前虽然我只能找到视图使用的列(以及扩展它们的索引),但我无法将它们匹配回索引的列。

例如:

我有TableA,它有 5 列:IDNameVal1Val2TableBID

我有 TableB,它有 3 列:IDNameCode

然后我创建一个视图View1,即:

SELECT A.ID,
Name,
Val1
FROM TableA A
INNER JOIN TableB ON A.TableBID = B.ID
WHERE B.Code = 'AAA'

当我使用以下方法查询参考文献时:

SELECT *
FROM sys.dm_sql_referenced_entities('dbo.View1', 'OBJECT')

我将获得其中的表/列引用列表,但没有指明哪个视图列引用了什么。

有什么方法可以访问我需要的信息,请记住我无法进行名称匹配,因为别名中的列可能使用别名,因此可能与基础数据的名称不同。

如果有任何影响,我正在使用 SQL Server 2008 SP1。

【问题讨论】:

  • 最终用户不应该关心索引
  • 如果“最终目的是为用户提供在查询视图时可以使用的列列表”,那么只显示所有列。不必在字段上建立索引即可对其进行查询。
  • 它旨在为具有特别高权限的用户提供管理界面,列可以标记为“可搜索”,但此状态的默认值将由索引的存在决定。它适用于表,但对于视图,因为我无法将视图的别名列与其基础表列匹配,我无法确定那里是否有索引。我可能没有很好地解释它,但此功能旨在允许生成查询 where 子句。通过引导用户使用索引列来减少生成缓慢 SQL 语句的机会。

标签: tsql sql-server-2008


【解决方案1】:

为每个视图列使用唯一组合Tablename + '_' + ColumnName 重命名视图中的列。然后您可以将视图列拆分为表和列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2019-08-10
    • 2015-03-08
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多