Wir haben eine Protokolltabelle mit einer Nachrichtenspalte, die manchmal einen Ausnahmestapel-Trace enthält. Ich habe einige Kriterien, die bestimmen, ob die Nachricht dies hat. Wir möchten diese Nachrichten nicht dem Kunden zeigen, sondern haben eine Nachricht wie:
Interner Fehler aufgetreten. Kontaktieren Sie uns mit dem Referenzcode xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Dabei ist xxx usw. eine Guid-Spalte in der Tabelle. Ich schreibe gespeicherten Prozess wie folgt:
declare @exceptionCriteria nvarchar(50)
select @exceptionCriteria = '%<enter criteria etc>%'
select LogDate,
case
when Message like @exceptionCriteria
then 'Internal Error Occured. Reference Code: ' + str(RequestID)
else Message
end
from UpdateQueue
RequestID
ist ein Guid-Datentyp in SQL Server und wird hier nicht in Zeichenfolgen konvertiert. Ich habe Code zum Konvertieren eines Guid in einen String gesehen, aber er ist mehrzeilig und ich glaube nicht, dass er in einer case-Anweisung funktionieren würde. Irgendwelche Ideen?
quelle
nvarchar
, viel wenigernvarchar(50)
. Eine eindeutige Kennung wird bei der Konvertierung in einen Textwert in hex-dash-36 behandelt.cast(RequestID as char(36))
.Es ist möglich, die Konvertierungsfunktion hier zu verwenden, aber 36 Zeichen reichen aus, um den eindeutigen Bezeichnerwert zu speichern:
quelle
char(36)
? Sie können auch verwendennchar(36)
, aber da eine GUID keinen Unicode enthält, kauft sie Ihnen nichts. Umgekehrt sind Operationen mitchar
im Allgemeinen schneller alsvarchar
.Meiner Meinung nach ist
uniqueidentifier
/ GUID weder einvarchar
noch einnvarchar
aber einchar(36)
. Deshalb benutze ich:quelle
Str(RequestID)
Versuchen Sie es stattdessenconvert(varchar(38), RequestID)
quelle