使用openrowset执行存储过程,而不用对每个列的结果集进行处理

时间:2018-08-31 00:38:43

标签: sql sql-server

当我使用其中包含动态SQL的openrowset执行存储过程时,会引发错误

  

包含动态SQL。考虑使用WITH RESULT SETS

一个例子如下。

select output.* 
from openrowset ('SQLOLEDB','SERVER=(local);Trusted_Connection=yes;', 
                 'SET FMTONLY OFF;SET NOCOUNT ON; exec storedproc ') as output

由于我有很多输出参数,有没有一种简单的方法来显示所有列?

注意:由于存储过程正在脚本(R)中执行,因此我必须使用openrowset

我也尝试了以下方法,但是没有用。

declare @sqlstmt nvarchar(max)
declare @queryout nvarchar(max)
set @queryout = 'storedproc   @parameter1=''''D'''', @param2=''''08/19/2018'''',  '
set @queryout  = '''exec ' + @queryout 
set @sqlstmt = N'select outputprod.* from openrowset (''SQLOLEDB'',''SERVER=(local);Trusted_Connection=yes;'' , ' + @queryout + ''') as outputprod'
print(@sqlstmt)
exec (@sqlstmt)

2 个答案:

答案 0 :(得分:0)

您可以在varchar变量中使用带有完全选择语句的动态查询,然后使用EXEC执行它。 here

例如

DECLARE @sqlCommand varchar(1000)
DECLARE @columnList varchar(75)
DECLARE @city varchar(75)
SET @columnList = 'CustomerID, ContactName, City'
SET @city = '''London'''
SET @sqlCommand = 'SELECT ' + @columnList + ' FROM customers WHERE City = ' + @city
EXEC (@sqlCommand)

答案 1 :(得分:0)

使用output parameter修改存储过程以返回生成的查询,以避免传递动态存储过程。

DECLARE @queryout NVARCHAR(max)
DECLARE @sqlstmt NVARCHAR(max)
EXEC storedproc @queryout OUTPUT 
SET @sqlstmt = N'SET FMTONLY OFF;SET NOCOUNT ON;' + @queryout
select output.* from openrowset  (
'SQLOLEDB','SERVER=(local);Trusted_Connection=yes;', @sqlstmt) as output