T-SQL, Wie das Ende einer IF-ELSE IF-ELSE block
Wenn ich den unten Verfahren und mit den richtigen Parametern, so dass der Wert -1 ist nicht zurückgekehrt, keiner meiner DML-Anweisungen feuern. Ich vermute, dass es die Behandlung aller meiner DML-Anweisungen als Teil der ELSE
block.
SQL Server 2014
Wie beende ich eine IF-ELSE-ELSE-IF-block?
ALTER PROCEDURE [GenerateNumber] (
@Code VARCHAR(2)
)
AS
BEGIN
DECLARE @stringConcat VARCHAR = 'X';
IF @Code = 'KP'
SET @stringConcat += 'Y';
ELSE IF @Code = 'RL'
SET @stringConcat += 'Z';
ElSE
-- Return error code and stop processing
SELECT -1;
RETURN;
BEGIN TRY
-- Various DML statements...
SELECT @successValue;
RETURN;
END TRY
BEGIN CATCH
SELECT -1;
RETURN;
END CATCH
END
InformationsquelleAutor contactmatt | 2015-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, Sie haben zu verwenden
Begin
undEnd
imElse
Erklärung, wie es enthält mehrere Zeilen von code.InformationsquelleAutor Krishnraj Rana
Ihrem Einrücken wird Ihnen liegen.
Nur die 1. Zeile hinter dem letzten ELSE wird ausgeführt, wie ein ANDERES condidion. Diese RÜCKKEHR wird laufen unabhängig. Ihr BEGINNEN, VERSUCHEN Sie nicht erreicht werden kann.
Versuchen Sie dies:
InformationsquelleAutor Brian Stork
Wenn Sie wollen, sowohl
SELECT -1
undRETURN
imELSE
Sie verwenden müssen, eineBEGIN
/END
block. Jetzt nur noch dieSELECT -1
wird innerhalb der else-Zweig.So müssen Sie
InformationsquelleAutor Sami Kuhmonen
Den letzten
ELSE
in If -, ELSE IF, ELSE enthält mehrere Zeilen von code. Sie müssen starten Sie es mitBEGIN
und Ende es mitEND
. Sehen Sie diese MSDN-Dokumentation für mehr details.InformationsquelleAutor Ellesedil
In deinem Fall (Wortspiel beabsichtigt), könnten Sie besser dran mit einem
CASE WHEN
Bau, sehen Sie auswerten möchten, der unterschiedliche Werte für Ihre@Code
variable. MSDN besagt, dassCASE
soll genau für solche Szenarien:Ich finde es macht den code ein wenig besser lesbar für einfache Auswertungen (aber das könnte sehr gut sein, eine persönliche Präferenz).
Dein code würde am Ende etwa so aussieht (pseudo-code. nicht getestet):
Mehr auf die
CASE
Aussage hier:https://msdn.microsoft.com/en-us/library/ms181765.aspx
InformationsquelleAutor SchmitzIT
In deinem Beispiel ZURÜCK läuft immer.
Von einer Kodierung der Praxis standard ist, sollten Sie immer BEGINNEN und ENDEN in SQL-meiner Meinung nach zu deutlich, um was es soll, die in der logical-block -. Ich bevorzuge die gleichen Muster in C#, wobei ich in Klammern geschrieben, auch wenn Sie nicht benötigt wird. Die Einrückung ist wichtig, meiner Meinung nach, sowie es leicht können Sie verfolgen, wo es beginnt und endet.
Diese sind äquivalent Verhalten, aber das erste zeigt deutlich, WÄHLE 1 ist abhängig von der logischen Zustand über.
Was Sie wirklich wollen ist:
InformationsquelleAutor UnhandledExcepSean