web-dev-qa-db-fra.com

SQL Server: conversion de UniqueIdentifier en chaîne dans une instruction case

Nous avons une table de journal qui contient une colonne de message qui contient parfois une trace de pile d'exceptions. J'ai des critères qui déterminent si le message a ceci. Nous ne voulons pas montrer ces messages au client, mais plutôt un message du type:

Une erreur interne s'est produite. Contactez-nous avec le code de référence xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx

où xxx etc est une colonne guid dans le tableau. J'écris stocké proc comme ceci:

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 est un type de données Guid dans SQL Server et n'est pas converti en chaîne ici. J'ai vu un code sur la façon de convertir un Guid en chaîne, mais il comporte plusieurs lignes et je ne pense pas que cela fonctionnerait dans un cas. Des idées?

116
aarona

Je pense avoir trouvé la réponse:

convert(nvarchar(50), RequestID)

Voici le lien où j'ai trouvé cette information:

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

227
aarona

Il est possible d'utiliser la fonction convert ici, mais 36 caractères suffisent pour contenir la valeur d'identificateur unique:

convert(nvarchar(36), requestID) as requestID
81

A mon avis, uniqueidentifier/GUID n'est ni un varchar ni un nvarchar mais un char(36). Donc j'utilise:

CAST(xyz AS char(36))
29
Silvan Hofer

Au lieu de Str(RequestID), essayez convert(varchar(38), RequestID)

8
AussieAtHeart