SQL Server: conversione di UniqueIdentifier in stringa in un'istruzione case


136

Abbiamo una tabella di registro che ha una colonna di messaggi che a volte ha una traccia dello stack delle eccezioni. Ho alcuni criteri che determinano se il messaggio ha questo. Non vogliamo mostrare questi messaggi al cliente ma invece abbiamo un messaggio come:

Si è verificato un errore interno. Contattateci con il codice di riferimento xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

dove xxx etc è una colonna guid nella tabella. Sto scrivendo proc memorizzato in questo modo:

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è un tipo di dati Guid in SQL Server e non viene convertito in stringa qui. Ho visto del codice su come convertire un Guid in stringa, ma è multi-linea e non credo che funzionerebbe in un'istruzione case. Qualche idea?

Risposte:


257

Penso di aver trovato la risposta:

convert(nvarchar(50), RequestID)

Ecco il link dove ho trovato queste informazioni:

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


21
In alternativa, cast (RequestID as varchar (50))
MK_Dev

3
Qual è la differenza di base tra cast () e convert ()?
RK Sharma,

5
@RKSharma è una domanda perfetta che puoi porre su stackoverflow.com o cercare in questo sito per vedere se qualcuno ha già risposto.
aarona,

1
Non so perché sceglierei nvarchar, tanto meno nvarchar(50). Un identificatore univoco, quando convertito in un valore di testo, viene trattato in hex-dash-36.
user2864740

9
Come dicono altre risposte, puoi condensarlo cast(RequestID as char(36)).
Frank Tan,

90

Qui è possibile utilizzare la funzione di conversione, ma sono sufficienti 36 caratteri per contenere il valore identificativo univoco:

convert(nvarchar(36), requestID) as requestID

2
perché la lunghezza è fissa anche varchar (36) è abbastanza qui
gdbdable

11
Dici "riparato" e tuttavia "varchar" nella stessa frase ... che ne dici char(36)? Potresti anche usare nchar(36), ma poiché un GUID non contiene unicode, non ti compra nulla. Al contrario, le operazioni con charsono generalmente più veloci di varchar.
r2evans,

47

Secondo me, uniqueidentifier/ GUID non è né a varcharné a nvarcharma a char(36). Pertanto utilizzo:

CAST(xyz AS char(36))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.