当我使用其中包含动态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)
答案 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