Ich bin neu in SQL Server. Bitte helfen Sie mir bei dieser AusgabeWarum Rückgabe -1 nicht wie erwartet funktioniert
RAISERROR('There is a problem in the code',16,1)
RETURN -1
Dies funktioniert einwandfrei. Also habe ich dies in einem gemeinsamen Verfahren wie folgt aus:
CREATE procedure [dbo].[Raise_Error]
(@ErrorMsg varchar(6000) ,
@ErrorSeverity integer = 16,
@ErrorState integer = 1)
AS
BEGIN
RAISERROR (@ErrorMsg, @ErrorSeverity, @ErrorState)
RETURN -1
END
Nun, wenn ich diese Prozedur aus einer anderen Prozedur rufen
CREATE PROCEDURE TEST_ORIG
AS
BEGIN
IF NOT EXISTS (SELECT * FROM table where FISCALYEAR='2016')
BEGIN
EXEC utils.dbo.[Raise_error]
@ErrorMsg = 'There are no valid records for processing'
RETURN -1
END
Ich erhalte eine Fehlermeldung
Msg 178, Ebene 15, Zustand 1, Zeile 13
Eine RETURN-Anweisung mit einem Rückgabewert kann in diesem Zusammenhang nicht verwendet werden
Kann jemand etwas Licht auf das werfen, was hier passiert und wie kann ich es korrigieren? Ich muss hier -1 zurückgeben.
Vielen Dank im Voraus
Statt der Rückkehr Wert zu fangen, ist es gut, Ausgangsvariablen zu verwenden und – User
in der rufenden Prozedur verbrauchen Wenn Sie einen Fehler aus Die Ausführung endet bei der Anweisung "RAISE". Der Code in Ihrer ersten Prozedur trifft niemals die 'RETURN'-Anweisung, weil' RAISERROR' die Ausführung stoppt und die Ausnahme auslöst. SQL Server hat dies erkannt und sagt Ihnen, dass Sie den Rückgabewert nie sehen werden, und es ist richtig. Ich schlage vor, dass Sie Ihre erste Prozedur ganz weglassen, weil sie keinen Mehrwert bringt: Sie macht genau das, was der "RAISERROR" von Anfang an tut. Verwenden Sie 'RAISERROR', wenn Sie eine Ausnahme haben. Sie benötigen keine benutzerdefinierte Prozedur. –