2014-11-27 3 views
0

Я пытаюсь сохранить результат хранимой процедуры в таблице темпа, поэтому я должен назвать его помощью OPENROWSET однако при выполнении запросаСинтаксис Ошибки при выполнении хранимой процедуры в 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) 

I получить следующее сообщение об ошибке:

Msg 156, Level 15, State 1, Line 1
Неправильный синтаксис около 'EXEC' ключевых слов.
Msg 102, Level 15, State 1, Line 1
Неправильный синтаксис около ')'.

Но я действительно не понимаю, что случилось с моей просьбой

Спасибо!

ответ

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 перед выполнением, который даст вам представление о том, что это неправильно.

+0

Спасибо большое, это решить мою проблему (кавычки отсутствовали). Однако я также понимаю, что я должен использовать метод, предоставленный Энди Корнеевым, так как я знаю столбцы, возвращенные моим SP. Большое спасибо за отзыв об отладке динамического sql. – reddy

1

Вы можете сделать это, не используя OPENROWSET.

Просто создать свою временную таблицу с тем же количеством, порядком и типами столбцов, как сохраненные возвраты процедуры, а затем просто вставить в нее, как это:

create table #myTempTable (columns definitions here) 

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

Большое спасибо, я перейду к этому подходу. – reddy

Смежные вопросы