Temos uma tabela de log que possui uma coluna de mensagem que às vezes possui um rastreamento de pilha de exceção. Eu tenho alguns critérios que determinam se a mensagem tem isso. Não queremos mostrar essas mensagens ao cliente, mas sim uma mensagem como:
Ocorreu um erro interno. Entre em contato conosco com o código de referência xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
onde xxx etc é uma coluna de guia na tabela. Estou escrevendo proc armazenado como este:
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
é um tipo de dados Guid no SQL Server e não converte em string aqui. Eu já vi algum código sobre como converter um Guid em string, mas é multi-alinhado e não acho que funcionaria em uma declaração de caso. Alguma ideia?
fonte
nvarchar
, muito menosnvarchar(50)
. Um identificador exclusivo, quando convertido em um valor de texto, é tratado em hex-dash-36.cast(RequestID as char(36))
.É possível usar a função convertida aqui, mas 36 caracteres são suficientes para manter o valor do identificador exclusivo:
fonte
char(36)
? Você também pode usarnchar(36)
, mas como um GUID não contém unicode, ele não compra nada. Por outro lado, as operações comchar
são geralmente mais rápidas quevarchar
.Na minha opinião,
uniqueidentifier
/ GUID não é umvarchar
nem umnvarchar
mas umchar(36)
. Portanto, eu uso:fonte
Em vez de
Str(RequestID)
, tenteconvert(varchar(38), RequestID)
fonte