使用参数在openrowset中执行存储过程的语法错误

时间:2014-11-27 15:18:53

标签: sql-server tsql

我试图将存储过程的结果存储在临时表中,因此我必须使用OPENROWSET来调用它,但是在执行查询时

DECLARE @sql nvarchar(MAX)      

DECLARE @callToProc nvarchar(255)
SET @callToProc =  'EXEC dbo.mySpName @param1=' + CAST ( 1 AS nvarchar(200) ) + ', @param2= ''Achat'' ' 

SET @sql =  'SELECT * INTO #mytempTab FROM OPENROWSET(''SQLNCLI'', ''Server=myserv;Trusted_Connection=yes;'', ' + @callToProc + ') AS myalias'

EXECUTE(@sql)

我收到以下错误:

  

第15行,第1行,第1行,第1行   关键字' EXEC'附近的语法不正确   消息102,级别15,状态1,行1   ')'附近的语法不正确。

但我真的不知道我的请求有什么问题

谢谢!

2 个答案:

答案 0 :(得分:1)

这不是正确的做法。尝试这样的事情。如果您知道否,则可以使用此方法。存储过程返回的列数。

DECLARE @sql NVARCHAR(MAX)
DECLARE @callToProc NVARCHAR(255)

SET @callToProc = '''EXEC dbo.sp_RecupererMontantLegsParRunSoitVenteSoitAchat @IdRun='+ Cast ( 1 AS NVARCHAR(200) )+ ', @TypeLeg= ''''Achat'''''' '

SET @sql = 'SELECT * INTO #mytempTab FROM OPENROWSET(''SQLNCLI'', ''Server=myserv;Trusted_Connection=yes;'', '
           + @callToProc + ') AS myalias'

EXECUTE(@sql)

注意:debug dynamic sql始终 print 执行前的动态sql,这样可以让您了解错误。

答案 1 :(得分:1)

您可以在不使用OPENROWSET的情况下执行此操作。

只需在存储过程返回时创建具有相同数量,顺序和列类型的临时表,然后只需插入其中:

create table #myTempTable ( columns definitions here)

insert into #mytempTab
exec dbo.mySpName
    @Param1 = ...