查询以计算 Sql Server 视图中的列数

Posted

技术标签:

【中文标题】查询以计算 Sql Server 视图中的列数【英文标题】:Query to count number of columns in a Sql Server View 【发布时间】:2019-02-28 16:33:41 【问题描述】:

就像我们有查询来查找表中的列数一样,是否有任何类似的查询来查找 Sql Server 视图中的总列数?

【问题讨论】:

【参考方案1】:

更简单的是使用 sys.columns。

select count(*)
from sys.columns
where OBJECT_ID = OBJECT_ID('YourView')

【讨论】:

这确实更简单。其他方法的优点是:它们可以使用任何 ad-hoc 语句、加入源等。但 OP 实际上并没有要求这样做。所以从我这边+1 ;-)【参考方案2】:

与 Larnu 的评论类似,我更喜欢 Table-Valued-Function

示例

Declare @tsql nvarchar(max) =  N'Select * from YourView_Table_Or_Query'

Select column_ordinal
      ,name
      ,system_type_name 
 From  sys.dm_exec_describe_first_result_set(@tsql,null,null )  

-- 或为伯爵

Select ColumnCnt=count(*) 
 From  sys.dm_exec_describe_first_result_set(@tsql,null,null)  

【讨论】:

啊,是的!忘记了 TVF(随 v2012 引入)。 +1 从我这边 我也是。我真的应该开始使用它了;比把所有东西都塞进一张临时桌子要容易得多。【参考方案3】:

除了相当笨拙的过程sp_describe_first_reuslt_set,您还可以使用XML 的通用功能:

SELECT (SELECT TOP 1 * FROM YourView FOR XML RAW, ELEMENTS XSINIL ,TYPE).value('count(/row/*)','int');

编辑:忘记添加ELEMENTS XSNIL,否则会省略值为NULL 的列...

【讨论】:

以上是关于查询以计算 Sql Server 视图中的列数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 Spark SQL(Databricks)中表中的列数?

M Power Query - 通过将值与两个参考列进行比较,有条件地转换动态列数中的值

为啥它说在 sql 查询中选择的列数错误?

如何为每个表计算由 SQL Server 中未指定数量的表共享的列中的不同值?

SqlServer如何查询表的列数

MS Access 2010 中的列数?