我有一个存储过程,当我执行它时,我得到了这个结果:
我想使用另一个存储过程获取特定列。
我该怎么做?
我的想法
创建一个新的临时表并填充其中的两列。但存储过程返回超过30亿行。因此,为它们创建临时表并不是一个好的表现。
如果这是唯一的解决方案,请告诉我
第二个想法
我无法更改存储过程,因为我只有执行它的权限才能修改它。所以,解决方案必须在我将不会在我执行的存储过程中写入的存储过程中,并且我无法修改。
答案 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来获取你想要的东西并不重要。