Einfache Frage:
THROW 50000, 'Because of this ->%<- is this message invisible.', 1;
- Sie können die Parameter% s,% d nicht wie in RAISERROR übergeben
- Sie müssen FORMATMESSAGE verwenden
- aber THROW ist trotzdem fehlgeschlagen, wenn% nicht verdoppelt wird (korrekte Anzeige)
Getestet unter Microsoft SQL Server 2012 (SP1) 11.0.3381.0 (X64), 11.0.3000.0 (X64)
Beispiel aus der realen Welt:
DECLARE @ProcParam VARCHAR(30) = 'Hehe%x!';
DECLARE @Message VARCHAR(500) = FORMATMESSAGE('Procedure input %s is wrong', @ProcParam);
PRINT 'Message: ' + @Message;
THROW 50000, @Message, 1;
sql-server
DiGi
quelle
quelle
char(32)
nach dem% setzen, die Nachricht (ohne%)Antworten:
Es scheint, dass sie die
printf
Funktionalität (oder zumindest einen Teil davon) im Befehl THROW belassen haben, aber keine Möglichkeit zum Übergeben eines Parameters an ihn enthalten haben. Ich habe jedes der in BOL für RAISEERROR aufgelisteten Zeichen als mögliche "Typen" ausprobiert%(d, i, o, s, x, X, or u)
und jedes von ihnen hat ein Leerzeichen zurückgegeben. Jedes andere Zeichen nach dem% und Sie erhalten eine gültige Zeichenfolge zurück. Ich vermute, dass sie den Wert durch einen ersetzen,NULL
was natürlich dazu führt, dass jede Zeichenfolgenverkettung a zurückgibtNULL
und beim Drucken leer aussieht.Leider gibt es ohne den Code dahinter (oder zumindest einen MS-Entwickler) zur Bestätigung keine Möglichkeit, sicher zu sein.
quelle
%n
zum Beispiel wird behandelt als\n
(probieren Sie es aus). Ich erhalte eine Bestätigung von Microsoft-Leuten und werde eine ausführlichere Erklärung veröffentlichen, wenn ich eine bekomme.Ich stimme Kenneth Fisher zu ... der Wert wird ersetzt durch
NULL
...quelle