2016-11-09 3 views
2

Ich habe zwei Verfahren. Einer wird nacheinander nach dem anderen aufgerufen.WAITFOR für eine Aktion innerhalb der Prozedur

Schritt 1: App (Java) ruft Proc1

create procedure proc1 
as 
begin 
stmt 1 
stmt 2 
stmt 3 
stmt 4 -- select query (result) 
end 

Schritt 2: Unsere Anwendung (Java) wird das Ergebnis erfassen und die Daten zu manipulieren und es wird in einer anderen Tabelle aktualisiert genannt result_table

Schritt 3: App (Java) Aufruf Proc2

create procedure Proc2 
as 
begin 
stmt 1 
stmt 2 
stmt 3 
stmt 5 -- this step uses result_table 
stmt 6 
end 

Wie Sie in beiden Verfahren sehen können, sind die ersten drei Aussagen gleich. Daher plane ich, beide Verfahren miteinander zu kombinieren, um Doppelungen von Codes zu vermeiden. so etwas wie

create procedure proc1 
as 
begin 
stmt 1 
stmt 2 
stmt 3 
stmt 4 -- select query (result) 
--- App(Java) will capture the result and process it 
--- wait until the app completes the changes then proceed to stmt 5 
stmt 5 
stmt 6 
end 

Hier ist der schwierige Teil ist für die Anwendung warten, um den Vorgang abzuschließen und fahren Sie mit Schritt 5. Können wir für einige Signal oder ähnliches warten innerhalb eines Verfahren. Irgendwelche Ideen ?

Hat gesucht das Forum hat keine richtigen Antworten bekommen.

+0

Mit CLR gespeicherten Prozeduren würde ich raten. Nutzen Sie das .NET Framework, um auf dieses Signal zu warten. Hängt davon ab, was dieses Signal ist natürlich ... –

+1

Gute altmodische Polling ist eine Option (rufen Sie 'WAITFOR DELAY' in einer Schleife). Sie könnten auch eine Nachricht in eine Service-Broker-Warteschlange schreiben und "RECEIVE" (das ist übrigens das einzige, was in einem WAITFOR erlaubt ist). –

+0

Unser App-Code verwendet 'Java'. Leider sind hier keine .NET oder C# Entwickler verfügbar: /. Können wir dies in der Datenbank behandeln lassen? –

Antwort

0

Versuchen Sie, GO Schlüsselwort zwischen stmt 4 und 5 zu verwenden und IF Bedingung zu verwenden, um nach der result_table zu überprüfen.

+4

Sie können GO nicht in gespeicherten Prozeduren verwenden. Von diesem Link: * GO ist keine Transact-SQL-Anweisung; Dies ist ein Befehl, der von den Dienstprogrammen sqlcmd und osql sowie vom SQL Server Management Studio-Code-Editor erkannt wird. * –

Verwandte Themen