У нас есть таблица журнала, в которой есть столбец сообщений, который иногда имеет трассировку стека исключений. У меня есть несколько критериев, по которым определяется, есть ли это в сообщении. Мы не хотим показывать эти сообщения покупателю, а вместо этого должны иметь такое сообщение:
Произошла внутренняя ошибка. Свяжитесь с нами и сообщите код ссылки 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. Любые идеи?
источник
nvarchar
, тем более чтоnvarchar(50)
. Уникальный идентификатор, преобразованный в текстовое значение, обрабатывается в шестнадцатеричном тире-36.cast(RequestID as char(36))
.Здесь можно использовать функцию convert, но 36 символов достаточно для хранения значения уникального идентификатора:
источник
char(36)
? Вы также можете использоватьnchar(36)
, но поскольку GUID не содержит Unicode, он вам ничего не дает. И наоборот, операции сchar
обычно быстрее, чемvarchar
.На мой взгляд,
uniqueidentifier
/ GUID - это не avarchar
и a,nvarchar
аchar(36)
. Поэтому я использую:источник
Вместо того
Str(RequestID)
, чтобы попробоватьconvert(varchar(38), RequestID)
источник