Mamy tabelę dziennika, która zawiera kolumnę komunikatów, która czasami zawiera ślad stosu wyjątków. Mam pewne kryteria, które określają, czy wiadomość ma to. Nie chcemy pokazywać tych wiadomości klientowi, ale zamiast tego mamy wiadomość taką jak:
Wystąpił błąd wewnętrzny. Skontaktuj się z nami, podając kod referencyjny xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
gdzie xxx itp. to kolumna guid w tabeli. Piszę przechowywane procy w ten sposób:
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
jest typem danych Guid w SQL Server i nie jest tutaj konwertowany na ciąg. Widziałem kod pokazujący, jak przekonwertować Guid na ciąg, ale jest on wieloliniowy i nie sądzę, aby zadziałał w instrukcji case. Jakieś pomysły?
źródło
nvarchar
, a tym bardziejnvarchar(50)
. Unikalny identyfikator po przekonwertowaniu na wartość tekstową jest traktowany jako szesnastkowy myślnik-36.cast(RequestID as char(36))
.Można tu użyć funkcji konwertującej, ale wystarczy 36 znaków, aby pomieścić wartość unikalnego identyfikatora:
źródło
char(36)
? Możesz również użyćnchar(36)
, ale ponieważ identyfikator GUID nie zawiera kodu Unicode, nic Cię nie kupuje. I odwrotnie, operacje w programiechar
są zwykle szybsze niżvarchar
.Moim zdaniem
uniqueidentifier
/ GUID nie jest anivarchar
ani,nvarchar
alechar(36)
. Dlatego używam:źródło
Zamiast tego
Str(RequestID)
spróbujconvert(varchar(38), RequestID)
źródło