就像我们使用查询来查找表中的列数一样,是否有类似的查询来查找Sql Server视图中的列总数?
31moq8wy1#
更简单的方法是使用sys.columns。
select count(*) from sys.columns where OBJECT_ID = OBJECT_ID('YourView')
sauutmhj2#
与Larnu的评论类似,我倾向于使用表值函数
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)
8yoxcaq73#
除了相当笨拙的过程sp_describe_first_reuslt_set之外,还可以使用XML的通用功能:
sp_describe_first_reuslt_set
SELECT (SELECT TOP 1 * FROM YourView FOR XML RAW, ELEMENTS XSINIL ,TYPE).value('count(/row/*)','int');
编辑:忘记添加ELEMENTS XSNIL,否则将忽略值为NULL的列...
ELEMENTS XSNIL
NULL
knsnq2tg4#
--这可能会有帮助
SELECT v.name, count(1) ColumnCount FROM SYS.VIEWS v INNER JOIN SYS.all_columns c ON v.object_id = c.object_id WHERE v.name IN (SELECT name FROM sys.VIEWS) GROUP BY v.name ORDER BY v.name
SELECT name FROM sys.VIEWS,可以替换为视图名或返回视图名的查询
4条答案
按热度按时间31moq8wy1#
更简单的方法是使用sys.columns。
sauutmhj2#
与Larnu的评论类似,我倾向于使用表值函数
8yoxcaq73#
除了相当笨拙的过程
sp_describe_first_reuslt_set
之外,还可以使用XML的通用功能:编辑:忘记添加
ELEMENTS XSNIL
,否则将忽略值为NULL
的列...knsnq2tg4#
--这可能会有帮助
SELECT name FROM sys.VIEWS,可以替换为视图名或返回视图名的查询