Tenemos una tabla de registro que tiene una columna de mensaje que a veces tiene un seguimiento de pila de excepción. Tengo algunos criterios que determinan si el mensaje tiene esto. No queremos mostrar estos mensajes al cliente, sino que tenemos un mensaje como:
Error interno ocurrido. Contáctenos con el código de referencia xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
donde xxx, etc. es una columna guid en la tabla. Estoy escribiendo un proceso almacenado como este:
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
es un tipo de datos Guid en SQL Server y no se convierte en cadena aquí. He visto un código sobre cómo convertir un Guid en una cadena, pero tiene varias líneas y no creo que funcione en una declaración de caso. ¿Algunas ideas?
fuente
nvarchar
, mucho menosnvarchar(50)
. Un identificador único, cuando se convierte en un valor de texto, se trata en hex-dash-36.cast(RequestID as char(36))
.Aquí es posible usar la función de conversión, pero 36 caracteres son suficientes para mantener el valor del identificador único:
fuente
char(36)
? También puede usarlonchar(36)
, pero como un GUID no contiene unicode, no le compra nada. Por el contrario, las operaciones conchar
son generalmente más rápidas quevarchar
.En mi opinión,
uniqueidentifier
/ GUID no es ni unvarchar
ni unnvarchar
sino unchar(36)
. Por eso uso:fuente
En lugar de
Str(RequestID)
intentarconvert(varchar(38), RequestID)
fuente