SQL Server: преобразование UniqueIdentifier в строку в выражении case - PullRequest
112 голосов
/ 10 июня 2011

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

Произошла внутренняя ошибка.Свяжитесь с США, указав код ссылки xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

, где xxx и т. Д. - это столбец подсказок в таблице.Я пишу хранимую процедуру следующим образом:

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 ]

221 голосов
/ 10 июня 2011

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

convert(nvarchar(50), RequestID)

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

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

80 голосов
/ 10 июня 2011

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

convert(nvarchar(36), requestID) as requestID
27 голосов
/ 03 сентября 2015

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

CAST(xyz AS char(36))
8 голосов
/ 10 июня 2011

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

...