SQL Server: conversión de UniqueIdentifier a cadena en una sentencia case


Tenemos una tabla de registro que tiene una columna de mensajes que a veces tiene un seguimiento de pila de excepciones. Tengo algunos criterios que determinan si el mensaje tiene esto. No queremos mostrar estos mensajes al cliente, sino que tenemos un mensaje como:

Se Produjo Un Error Interno. Contáctenos con código de referencia xxxxxxxx-xxxx-xxxx-xxxxxxxxxxx

Donde xxx etc es una columna guid en la tabla. Estoy escribiendo proc 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 Guid tipo de datos en SQL Server y no convierte a cadena aquí. He visto un poco de código sobre cómo convertir un Guid a cadena, pero es de varias líneas y no creo que funcionaría en una sentencia case. Alguna idea?

Author: cwharris, 2011-06-10

4 answers

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

 193
Author: DJTripleThreat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-09 22:14:07

Es posible usar la función convert aquí, pero 36 caracteres son suficientes para mantener el valor de identificador único:

convert(nvarchar(36), requestID) as requestID
 72
Author: Philippe Grondier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-09 22:18:09

Según mi opinión, uniquieidentifier / GUID no es un varchar ni un nvarchar sino un char(36). Por lo tanto utilizo

CAST(xyz AS char(36))
 19
Author: Silvan Hofer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-03 11:43:52

En lugar de Str(RequestID), intente convert(varchar(38), RequestID)

 8
Author: AussieAtHeart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-10 04:49:39