2011-06-09 3 views
77

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

Внутренняя ошибка. Контакты США с эталонным кодом ХХХХХХХХХХХХ-XXXXXXXX-ХХХХХХХХХХХХ

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

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 case. Есть идеи?

ответ

168

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

convert(nvarchar(50), RequestID) 

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

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

+16

В качестве альтернативы, литая (RequestID в VARCHAR (50)) –

+1

Какова основная разница между броском() и преобразования()? –

+2

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

67

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

convert(nvarchar(36), requestID) as requestID 
+0

, потому что длина фиксирована, даже здесь varchar (36) здесь достаточно – devi

+4

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

16

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

CAST(xyz AS char(36)) 
Смежные вопросы