【问题标题】:In a SQL Server view, get the "AS" info for the columns in the view在 SQL Server 视图中,获取视图中列的“AS”信息
【发布时间】:2013-10-31 16:37:08
【问题描述】:

所以我有一个视图,其中有许多为不同列定义的“AS”内容,例如,一些视图列简单地映射到一个物理表中的一列,一些由函数定义等:

SELECT
   dbo.LoanDataTable.F123 AS LoanOfficer, 
   dbo.udf_GetChannelTypeValueWithLoanOfficer(dbo.LoanDataTable.F123) AS ChannelType

在我们的应用程序中,我希望能够在网页上显示视图列与其“AS”定义的映射,在具有两列的网格中,如下所示:

LoanOfficer     dbo.LoanDataTable.F123
ChannelType     dbo.udf_GetChannelTypeValueWithLoanOfficer(dbo.LoanDataTable.F123)

我研究过stackoverflow:

Is there a way to retrieve the view definition from a SQL Server using plain ADO?

Suggestions on storing view meta in SQL Server 2008

第一个所做的只是检索视图定义的全文,没有人回答第二个。

如果我检索视图定义的全文,例如在本文顶部看到的,那么我仍然需要以某种方式解析文本以提取“AS”组件。所以我的问题是:有没有一种方法可以轻松地从 SQL Server 2008 R2 及更高版本中提取这些信息,或者如果没有,是否有人已经编写了一些视图定义解析器代码来执行此操作?

【问题讨论】:

  • 这里有一个关于从昨天获取视图信息的问题的链接:stackoverflow.com/questions/19687112/…。您返回的任何内容都需要进行某种解析。
  • 并不是说这样的视图定义解析器代码会是火箭科学,但是嘿,如果其他人已经这样做了,那么节省时间会很好:)
  • 感谢 Andrew,该帖子中的信息在一般意义上非常有帮助(尤其是 sp_columns 系统存储过程,非常方便),但仍然无法访问查看定义:)
  • 它不会是火箭科学,但它会非常接近一个功能强大的词法分析器。考虑一下您必须能够评估哪些内容才能显示 TableName.ColumnName - 别名、显式连接、隐式连接、子查询、With、As、没有 As、[] 用于列名。我可以继续下去。不完全是火箭科学,但相当复杂。
  • 除非我遗漏了什么,否则我认为获得我所追求的信息(一个简单的键值列表)并不难。一般算法的高级描述是: 1) 提取 'SELECT' 之后和列定义之后的其他有效 DDL 关键字之前的内容; 2)用逗号分割提取的列定义; 2)取出分割的块,每个块在“ AS ”之前都有一件事,在它之后有一件事; 3) 有 2 组值(请注意,我不需要进一步深入到“ AS ”之前的任何内容)。

标签: sql sql-server sql-server-2008-r2


【解决方案1】:

这将为您提供实际的 DDL,如果这是您要查找的第一部分:

SELECT OBJECT_DEFINITION (OBJECT_ID('yourSchema.yourViewGoesHere')) AS ObjectDefinition; 

【讨论】:

  • 谢谢,这是我见过的将完整定义作为起点的最简洁的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
相关资源
最近更新 更多