Ich frage mich, warum SQL Server nicht in der Lage ist, das error_procedure auszuführen, während das dynamische SQL in einer Prozedur ausgeführt wird. Es ist mir möglich, den Prozedurnamen in der Fehlermeldung in Szenario 2 aufzurufen?Geladener Prozedurname während der Ausführung von Fehlerdynamischen SQL
Szenario 1:
CREATE PROCEDURE [dbo].[TEST_PROCEDURE]
AS
BEGIN
EXEC SELECT 1/0
END
GO
EXEC TEST_PROCEDURE
Fehlermeldung:
Msg 8134, Ebene 16, Status 1, Prozedur TEST_PROCEDURE, Line 6
Division durch Null Fehler aufgetreten.
Szenario 2:
CREATE PROCEDURE [dbo].[TEST_PROCEDURE]
AS
BEGIN
EXEC('SELECT 1/0')
END
GO
EXEC TEST_PROCEDURE
Fehlermeldung:
Msg 8134, Ebene 16, Status 1, Zeile 1
Division durch Null Fehler aufgetreten.
Uh, Ihr erstes Szenario wird immer einen Fehler, wenn das Verfahren zu schaffen, weil Sie nicht die richtige Syntax. EXEC führt eine gespeicherte Prozedur aus (es gibt keine gespeicherte Prozedur "SELECT"). EXEC() führt jeden Parameter aus, den Sie in die Klammern setzen. Um eine benutzerdefinierte Fehlermeldung mit dem Prozedurnamen auszugeben, fügen Sie eine TRY CATCH-Anweisung in Ihre Prozedur ein und fügen Sie eine benutzerdefinierte Fehlernachricht in Ihren CATCH ein. – ZLK
Danke für die Antwort! Ja, ich habe herausgefunden, dass ich den TRY CATCH-Mechanismus verwenden kann, um die Prozedur in Szenario 2 zu bekommen. Abgesehen davon, ist das eine Alternative? – 0070
Es gibt nicht wirklich eine Alternative. TRY CATCH ist die einzige Möglichkeit, spezifische Fehlerinformationen zu erfassen. Beachten Sie außerdem, dass SQL möglicherweise irreführende Informationen zu Fehlern liefert, wenn Sie etwas in einer gespeicherten Prozedur ausführen. z.B. Wenn Sie 100 Codezeilen haben, fügen Sie 'EXEC ('SELECT 1/0')' zur 101. Zeile hinzu, es wird ein Fehler in Zeile 1 angezeigt (weil das die erste Zeile des Codes ist, der gerade ausgeführt wird)). – ZLK