我试图将存储过程的结果存储在临时表中,因此我必须使用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 ')'附近的语法不正确。
但我真的不知道我的请求有什么问题
谢谢!
答案 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 = ...