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


136

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

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

где xxx и т. д. - это столбец 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. Любые идеи?

Ответы:


257

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

convert(nvarchar(50), RequestID)

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

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


21
В качестве альтернативы
приведите

3
В чем основное различие между cast () и convert ()?
РК Шарма

5
@RKSharma - идеальный вопрос, который вы можете задать на stackoverflow.com или поищите на этом сайте, чтобы узнать, ответил ли кто-нибудь на него.
Аарона

1
Не знаю, почему я выберу nvarchar, тем более что nvarchar(50). Уникальный идентификатор, преобразованный в текстовое значение, обрабатывается в шестнадцатеричном тире-36.
user2864740

9
Как говорят другие ответы, вы можете это сжать cast(RequestID as char(36)).
Фрэнк Тан

90

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

convert(nvarchar(36), requestID) as requestID

2
поскольку длина фиксирована, здесь достаточно varchar (36)
gdbdable

11
Вы говорите «фиксированный» и все же «варчар» в одном предложении ... как насчет char(36)? Вы также можете использовать nchar(36), но поскольку GUID не содержит Unicode, он вам ничего не дает. И наоборот, операции с charобычно быстрее, чем varchar.
r2evans


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.