Ich bin damit beschäftigt, einige gespeicherte PostgreSQL-Prozeduren/-Funktionen für SQL Server 2014 TSQL neu zu schreiben.TSQL-Prozedur, die mehrere Datenzeilen zurückgibt
Ich habe Mühe, meine Werte von dieser gespeicherten Prozedur obwohl, diese ist nur ein Test, aber ich versuche, mehrere Zeilen von Daten in diesem Fall für die beiden Variablen si_code und co_desc zurückgeben.
Ich habe mein Verfahren wie (als Test) folgt
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
was ist der beste Weg, um meine Ergebnisse zurück zu wissen, dass es mehrere Reihen sein wird?
Sie sollten Ihre Eingabe Tabelle und gewünschte Ausgabe zeigen, es sieht aus wie Sie sollten überhaupt keinen Cursor verwenden (sie sind ein Ansatz des letzten Ausweges). Was ist die Absicht des bedingungslosen Raubüberfalls? –
In diesem Beispiel brauche ich den Cursor nicht, das ist nur ein Test, die reale Prozedur ist zu komplex, um auf einen Cursor zu verzichten – Trent
Sie könnten auch eine Funktion in Erwägung ziehen, die eine Tabelle ausgibt. Aber wenn der SP der einzige Weg ist - erstelle/definiere eine Tabellenvariable und gib das am Ende der SP aus. Auch - in der Regel Cursor sind "schlecht" in SQL-Server (schlechte Gesamtleistung). Wenn Sie einen Weg finden, Cursor zu vermeiden, haben Sie eine bessere Leistung. – ripvlan