Помещение результирующих наборов во временную таблицу

#sql-server #sql-server-2008 #stored-procedures #resultset

#sql-server #sql-server-2008 #хранимые процедуры #набор результатов

Вопрос:

У меня есть процедура с именем Insert, и код выглядит следующим образом:

 Create procedure Gen_insert
As
BEGIN


create table #temp
 ( insert_stmt varchar(max) ) 
 insert into #temp  
EXEC Generate_Insert @Table = 'Admin'

 insert into #temp  
EXEC Generate_Insert @Table = 'Impas'

 insert into #temp 
 EXEC Generate_Insert @Table = 'Asui'

 insert into #temp 
 EXEC Generate_Insert @Table = 'Alstd'  

select * from #temp 

End
  

Когда я его выполняю, я получаю следующую ошибку:

 Msg 8164, Level 16, State 1, Procedure Gen_Insert, Line 73
An INSERT EXEC statement cannot be nested.
  

Кто-нибудь может мне помочь.

Комментарии:

1. с какой стати вы бы назвали свой процесс чем-то вроде INSERT ?

2. с какой стати вы не делаете правильные вещи и пишете вставки, а не используете общую процедуру вставки?

Ответ №1:

An INSERT EXEC statement cannot be nested. Сообщение об ошибке довольно четкое. Вы вставляете ВСТАВКУ… EXEC. инструкции. Либо вызываемые вами процедуры ( Generate_Insert ) снова используют INSERT … EXEC или вызывающая insert процедура использует его при ВСТАВКЕ … EXEC. Только вы можете определить, что это так. Как правило, INSERT … Следует избегать EXEC из-за этой и других проблем.