Nous avons une table de journal qui a une colonne de message qui a parfois une trace de pile d'exceptions. J'ai quelques critères qui déterminent si le message contient cela. Nous ne voulons pas montrer ces messages au client, mais plutôt un message comme:
Une erreur interne s'est produite. Contactez-nous avec le code de référence xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
où xxx etc est une colonne guid dans le tableau. J'écris un proc stocké comme ceci:
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
est un type de données Guid dans SQL Server et n'est pas converti en chaîne ici. J'ai vu du code sur la façon de convertir un Guid en chaîne, mais il est multi-lignes et je ne pense pas que cela fonctionnerait dans une instruction case. Des idées?
la source
nvarchar
, encore moinsnvarchar(50)
. Un identifiant unique, lorsqu'il est converti en une valeur de texte est traité dans hex-dash-36.cast(RequestID as char(36))
.Il est possible d'utiliser la fonction de conversion ici, mais 36 caractères suffisent pour contenir la valeur d'identifiant unique:
la source
char(36)
? Vous pouvez également utilisernchar(36)
, mais comme un GUID ne contient pas d'Unicode, il ne vous achète rien. À l'inverse, les opérations avecchar
sont généralement plus rapides quevarchar
.À mon avis,
uniqueidentifier
/ GUID n'est ni unvarchar
ni unnvarchar
mais unchar(36)
. Par conséquent, j'utilise:la source
Au lieu de
Str(RequestID)
, essayezconvert(varchar(38), RequestID)
la source