-1

をご覧ください。私は一時テーブルに格納されているストアドプロシージャを実行する必要があります。私は2つのテーブルを持っています:selectとsp_executesqlの関係は?

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) 
) 

私はテーブルBに保存する必要がありますが、ストアドプロシージャです。

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; 

しかしラインで

"幹部sp_executesqlを" 結果は次のとおりです:

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

おかげ

+0

あなたは文字通り実行しています:#querysEjecutarからselect campo1これはすべてのexec文を返しますが、実際には実行しません。これらの文をすべて1つの文字列に作成し、それをsp_executesqlに渡す必要があります。 – JeffO

答えて

0

あなたは、以下のスクリプトを使用して、動的SQLを置き換えることができます。

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 
私はこれをしませんでした

これは、基本的にpruebaaテーブルのすべての行に対してinsertapruebabを呼び出します。

+0

これは簡単な方法で行うことができます。しかし、私はそうする必要があります。 –

+0

簡単な方法は私の答えで提供されています。答えの最初のクエリを見てください。 – Vasanth

+0

残念ながら、それは動作しません。ストアドプロシージャを実行することはできません。より正確にストアドプロシージャを動的に実行する必要がありますが、一時テーブルに格納されているクエリを実行することはできません。 –