Sql server 将结果集限制为仅第一列';第一行的值是多少?

Sql server 将结果集限制为仅第一列';第一行的值是多少?,sql-server,tsql,stored-procedures,sql-server-2016,dynamic-sql,Sql Server,Tsql,Stored Procedures,Sql Server 2016,Dynamic Sql,我正在使用Microsoft SQL Server 2016 我遇到了一个动态SQL情况,其中输入的查询可能是SQL命令,也可能是存储过程。我需要能够获取结果集左上角的第一个值。我已经找到了一种针对SQL而不是存储过程的方法 对于SQL脚本,我使用sp\u descripe\u first\u result\u set来确定有多少列,并生成一个包含空列的匹配脚本,以进行合并,如下所示: select null as C1, null as C2 where 1=0 union all selec

我正在使用Microsoft SQL Server 2016

我遇到了一个动态SQL情况,其中输入的查询可能是SQL命令,也可能是存储过程。我需要能够获取结果集左上角的第一个值。我已经找到了一种针对SQL而不是存储过程的方法

对于SQL脚本,我使用
sp\u descripe\u first\u result\u set
来确定有多少列,并生成一个包含空列的匹配脚本,以进行合并,如下所示:

select null as C1, null as C2 where 1=0 union all select 'hello', 'world'
这使得只获取
Top1C1
非常简单


但是,对于存储过程,我不能使用相同的技术,因为有时存储过程具有不同的返回路径,这会导致
sp\u descripe\u first\u result\u set
的结果不兼容。我无法将结果集插入到临时表中,因为我不知道将有多少列或列是什么。

使用
select-into
openrowset
as如何?@ZoharPeled,不,因为存储过程有时会有不兼容的结果(例如,有时SP返回多个列,但如果您提供@onlyCount=1的参数,则结果只会是一个包含记录计数的列)。除此之外,我还必须传递感觉不好的连接字符串信息(此脚本将存在于数百个数据库中,每个数据库由单独的公司使用)。将
select into
openrowset
一起使用如何?@ZoharPeled,否,因为存储过程有时会有不兼容的结果(例如,有时SP返回多个列,但如果您提供参数@onlyCount=1,则结果只会是其中包含记录计数的一列).除此之外,我还必须传递感觉不好的连接字符串信息(此脚本将存在于数百个数据库中,每个数据库由单独的公司使用)。