SQL Server: convertir UniqueIdentifier a cadena en una declaración de caso


136

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

RequestIDes 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?

Respuestas:


257

Creo que encontré la respuesta:

convert(nvarchar(50), RequestID)

Aquí está el enlace donde encontré esta información:

http://msdn.microsoft.com/en-us/library/ms187928.aspx


21
Alternativamente, emitir (RequestID como varchar (50))
MK_Dev

3
¿Cuál es la diferencia básica entre cast () y convert ()?
RK Sharma

55
@RKSharma, es una pregunta perfecta para usted en stackoverflow.com o busque en este sitio para ver si alguien ya lo ha respondido.
aarona

1
No sé por qué elegiría nvarchar, mucho menos nvarchar(50). Un identificador único, cuando se convierte en un valor de texto, se trata en hex-dash-36.
user2864740

9
Como dicen otras respuestas, puedes condensar esto cast(RequestID as char(36)).
Frank Tan

90

Aquí es posible usar la función de conversión, pero 36 caracteres son suficientes para mantener el valor del identificador único:

convert(nvarchar(36), requestID) as requestID

2
porque la longitud es fija, incluso varchar (36) es suficiente aquí
gdbdable

11
Dices "fijo" y aún "varchar" en la misma oración ... ¿qué tal char(36)? También puede usarlo nchar(36), pero como un GUID no contiene unicode, no le compra nada. Por el contrario, las operaciones con charson generalmente más rápidas que varchar.
r2evans

47

En mi opinión, uniqueidentifier/ GUID no es ni un varcharni un nvarcharsino un char(36). Por eso uso:

CAST(xyz AS char(36))

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.