SQL Server: преобразование UniqueIdentifier в строку в операторе case


у нас есть таблица журнала, в которой есть столбец сообщений, который иногда имеет трассировку стека исключений. У меня есть некоторые критерии, которые определяют, имеет ли сообщение это. Мы не хотим показывать эти сообщения клиенту, но вместо этого имеем сообщение типа:

Внутренняя Ошибка. связаться с нами с кодом ссылки xxxxxxxx-xxxx-xxxx-xxxx-XXXXXXXXXX

где xxx etc-это столбец guid в таблице. Я пишу хранимой процедуре, как это:

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 является типом данных Guid в SQL Server и не преобразуется в строку здесь. Я видел некоторый код о том, как преобразовать Guid в строку, но он многострочный, и я не думаю, что он будет работать в операторе case. Есть идеи?

4 90

4 ответа:

Я думаю, что нашел ответ:

convert(nvarchar(50), RequestID)

вот ссылка, где я нашел эту информацию:

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

здесь можно использовать функцию convert, но для хранения значения уникального идентификатора достаточно 36 символов:

convert(nvarchar(36), requestID) as requestID

по моему мнению, uniquieidentifier / GUID не является ни varchar, ни nvarchar, а char(36). Поэтому я использую

CAST(xyz AS char(36))

вместо Str(RequestID) попробуй convert(varchar(38), RequestID)