-1

Please. I need to run a stored procedure that is stored in a temporary table. I have two tables:

create table pruebaa
(
    cam1 integer primary key,
    cam2 varchar(20)
)

insert into pruebaa (cam1, cam2) values (1, 'valor1');
insert into pruebaa (cam1, cam2) values (2, 'valor2');
insert into pruebaa (cam1, cam2) values (3, 'valor3');
insert into pruebaa (cam1, cam2) values (4, 'valor4');
insert into pruebaa (cam1, cam2) values (5, 'valor5');
insert into pruebaa (cam1, cam2) values (6, 'valor6');

create table pruebab
(
    cam1 integer primary key,
    cam2 varchar(20)
)

I need save the data table A to table B but for stored procedure. I did this:

create procedure insertapruebab(@cam1_ex int, @cam2_ex varchar(20))
as
begin
    insert into pruebab(cam1, cam2) values (@cam1_ex, @cam2_ex);
end

create table #querysEjecutar(
    campo1 varchar(2000)
)

insert into #querysEjecutar(campo1) (select ' exec insertapruebab '+ CONVERT(varchar(20), cam1)  + ', ' + CONVERT(varchar(20), cam2) from pruebaa);
declare @campoquery nvarchar(2000);
set @campoquery = 'select campo1 from #querysEjecutar';
exec sp_executesql @campoquery;
select * from pruebab;

But in the line "exec sp_executesql" the result is:

 exec insertapruebab 1, valor1
 exec insertapruebab 2, valor2
 exec insertapruebab 3, valor3
 exec insertapruebab 4, valor4
 exec insertapruebab 5, valor5
 exec insertapruebab 6, valor6

Thanks

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
  • You're literally executing: select campo1 from #querysEjecutar which is just going to return all the exec statements but not actually execute them. You need to create all those statements into one string and then pass that to sp_executesql. – JeffO Apr 27 '16 at 18:30

1 Answers1

0

You can replace the dynamic SQL with below script:

  declare @Cam1Counter int
  select @Cam1Counter = min(cam1) from pruebaa

  while @Cam1Counter > 0
  begin
     declare @cam2Value varchar(20)
     select @cam2Value = cam2 from pruebaa where cam1 = @Cam1Counter

     exec insertapruebab @Cam1Counter, @cam2Value

     select @Cam1Counter = min(cam1) from pruebaa where cam1 > @Cam1Counter
  end

This will basically call insertapruebab for every row in pruebaa table.

Vasanth
  • 1,670
  • 1
  • 13
  • 17