2016-09-16 4 views
0

に複数の行を返さない以下のSQL Serverのカーソルは、私はSQL Serverのストアドプロシージャから結果の複数の行を返すための正しい方法については数日前に尋ねた、それは私が使用することをお勧めされたエクセル

select @var01, @var02 

これは、私はSQL Serverの管理の内部でこれを実行した場合、完璧に動作しているようです、私は、このような私の現在のストアドプロシージャ

if(object_id('sp_looga')) is not null 
    drop procedure sp_looga 
go 

create procedure sp_looga 
as 

    declare @idno integer 
    declare @desc char(50) 

    declare colours_cur cursor for 
    select co_idno, co_desc from colours 
    where co_status != 'A' 
    order by co_idno 

    open colours_cur 
    fetch next from colours_cur into @idno, @desc 

    while @@fetch_status = 0 
    begin 

     select @idno, @desc 

    fetch next from colours_cur into @idno, @desc 
    end 
    close colours_cur deallocate colours_cur 

go 

として複数行のデータを返すために意図ループ内でそれを使用するまで、正常に動作するようですが、ときに私はそれを実行それは1行を返すだけですか?

答えて

0

この場合、カーソルを使用する必要はありません。カーソル内でそのように選択すると、単一のテーブルではなく、一連の個別の結果が返されます。プログラムでは、それらの結果をそれぞれキャプチャしてそれらを結合することができますが、Excelでこれを行うことはできませんし、そうすることもできません。私はカプセル化されたクエリを返します。サイドノートとして

if(object_id('sp_looga')) is not null 
    drop procedure sp_looga 
go 

create procedure sp_looga 
as 

    select co_idno, co_desc from colours 
    where co_status != 'A' 
    order by co_idno 

go 

- ストアドプロシージャを使用する必要がない限り、あなただけの私の知る限り型SQLであるためにあなたのデータ接続のプロパティの定義を編集し、コマンドテキストを入力することで見ることができるようにExcelからクエリを実行することができます。

EDIT:

私はあなたのotherのポストを見ていました。この手順の結果をExcelと他の手順で共有するには、INSERT...EXECを使用してDan Guzmanのソリューションを使用する必要があります。あなたは実際に元のソリューションの正しい軌道にいたのですが、SELECTの代わりにINSERT #TEMP EXEC proc_nameのようなものを実行したはずです。唯一の注意点は、まずCREATE一時テーブルを必要とすることです。

関連する問題