SQL Server 2014s TSQLのPostgreSQLストアドプロシージャ/関数を書き直そうとしています。複数の行のデータを返すTSQLプロシージャ
私はこのストアドプロシージャから私の値を返すのには苦労していますが、これは単なるテストですが、私は2つの変数si_codeとco_descに対してこの場合複数の行のデータを返そうとしています。
(テストとして)次のように私は私の手順を持っている
if (object_id('p_get_serial')) is not null
drop procedure p_get_serial
go
create procedure p_get_serial(@par01 char(20), @par02 integer)
as
declare
@co_num integer,
@co_desc char(20),
@si_code char(20),
@log char(40)
declare mycur cursor for
select co_num, co_desc
from colours
where co_num <= @par02
open mycur
fetch next from mycur into @co_num,
@co_desc
while @@FETCH_STATUS = 0
begin
set @si_code = ''
select @si_code = si_code
from sitems
where si_co_num = @co_num
set @log = @co_desc + ' ' + @si_code
raiserror(@log,0,1) with nowait
fetch next from mycur into @co_num, @co_desc
end
close mycur deallocate mycur
go
exec p_get_serial @par01 = 'paramater01', @par02 = 10
いくつかの行があることを知って、私の結果を返すための最良の方法は何ですか?
入力テーブルと出力を表示する必要があります。彼らは最後の手段である)。無条件ライザーの意図は何ですか? –
この例では私はカーソルを必要としません。これは単なるテストであり、実際のプロシージャはカーソルなしでは複雑すぎます。 – Trent
テーブルを出力するファンクションも考えられます。しかし、SPが唯一の方法であれば、テーブル変数を作成/定義し、spの終わりにそれを出力します。また、一般的に、カーソルはSQL Serverでは「不良」(全体的なパフォーマンスが悪い)です。あなたがカーソルを避ける方法を見つけることができれば、より良いパフォーマンスが得られます。 – ripvlan