0

Meine Stored Procedure einen allgemeinen Tabellenausdruck erstellt den „Letzten Kurs“/„Best Bid“ für jeden aufgelisteten StockName (der Code ist langwierig zu finden, aber verwendet:SQL (Azure) unter Verwendung einer Tabelle var innerhalb einer CTE

row_number() OVER (partition BY StockName ORDER BY Date/Price)  

und eine WHERE Land = ‚USA‘)

Während das funktioniert gut ich möchte jetzt die Möglichkeit zur Eingabe der Ergebnisse aus einer separaten Abfrage (eine Ergebnismenge von Ländern hinzuzufügen: ‚USA‘, ‚kann‘, 'MEX') und durchlaufen den oben gezeigten SP.

Allerdings bin ich verloren auf wie und wo die Datenübergabe und/oder Schleifen zu tun.

Sollte ich zwei SP haben und die Werte zwischen ihnen übergeben ??? Oder erstellen Sie eine Schleife in einem SP?

Antwort

1

Sie könnten SQL CURSOR verwenden, um das Abfrageergebnis zu loopen und die Stored Procedure, die Sie erwähnten, aufzurufen. Hier ist ein Beispiel für die Verwendung von CURSOR.

declare cur_countr cursor for 
    select 'USA' as Country union 
    select 'CAN' as Country union 
    select 'MEX' as Country 

declare @country nvarchar(50) 
open cur_countr 

fetch next from cur_countr into @country 
    while(@@FETCH_STATUS = 0) 
      begin 
         print @country 
     -- You will get country here and invoke the Stored Procedure you defined 
         fetch next from cur_countr into @country 
      end 

close cur_countr 
deallocate cur_countr 
+0

Vielen Dank für Ihre Antwort. Ich habe noch Ihren Vorschlag zu versuchen (und fwiw die Anzahl der Länder in den Cursor wird als Ergebnis einer separaten Abfrage variieren), aber ich habe gelesen, dass zuvor Cursor vermieden werden sollten (wie die Pest). Ich nehme an, das ist nicht (immer) so? –

+0

Wir können auch einen Cursor aus einer Abfrage wie folgt definieren. Deklarieren Sie den Cursor cur_countr für Select Country from table_countries – Amor

Verwandte Themen