SQL如何从存储过程内的存储过程中获取特定列

时间:2014-03-16 18:29:42

标签: sql sql-server sql-server-2005 stored-procedures

我有一个存储过程,当我执行它时,我得到了这个结果:

enter image description here

我想使用另一个存储过程获取特定列。

我该怎么做?

我的想法

创建一个新的临时表并填充其中的两列。但存储过程返回超过30亿行。因此,为它们创建临时表并不是一个好的表现。

如果这是唯一的解决方案,请告诉我

第二个想法

我无法更改存储过程,因为我只有执行它的权限才能修改它。所以,解决方案必须在我将不会在我执行的存储过程中写入的存储过程中,并且我无法修改。

2 个答案:

答案 0 :(得分:1)

我猜你可以使用OPENROWSET执行并只获取所需的列。

SELECT ColumnName    --<-- The columns required.
FROM 
 OPENROWSET('SQLNCLI'
            ,'Server=ServerName\InstanceName;Trusted_Connection=yes;database=DatabaseName'
            ,'EXECUTE dbo.Proc_Name')

<强>更新

正如它在错误消息中所说的那样,在sql server中默认关闭此功能。您需要通过执行以下系统存储过程来允许..

EXECUTE sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
EXECUTE sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

答案 1 :(得分:0)

无论哪种方式,我相信如果你执行一个存储过程,SQL Server将运行整个事情(所有行和列都必须返回),除非它需要一些修剪它的参数。只有这样你才能从中提取你想要的东西。在这一点上使用临时表还是openrowset来获取你想要的东西并不重要。