SQL Server: преобразование UniqueIdentifier в строку в операторе case
у нас есть таблица журнала, которая имеет столбец сообщения, который иногда имеет трассировку стека исключений. У меня есть некоторые критерии, которые определяют, имеет ли сообщение это. Мы не хотим показывать эти сообщения клиенту, но вместо этого имеем сообщение типа:
Внутренняя Ошибка. связаться с нами со ссылкой код xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
где 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 в string, но он многострочный, и я не думаю, что он будет работать в операторе case. Есть идеи?
4 ответов
здесь можно использовать функцию convert, но для хранения уникального значения идентификатора достаточно 36 символов:
convert(nvarchar(36), requestID) as requestID
по моему мнению, uniquieidentifier / GUID не является ни varchar, ни nvarchar, но char(36). Поэтому я использую
CAST(xyz AS char(36))