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

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

Une Erreur Interne S'Est Produite. contacter avec le code de référence xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Où xxx etc est une colonne guid dans la table. J'écris un proc stocké 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 Guid type de données dans SQL Server et ne convertit pas en chaîne ici. J'ai vu du code sur la façon de convertir un Guid en chaîne, mais il est multi-aligné et je ne pense pas que cela fonctionnerait dans une instruction case. Des idées?

90
demandé sur cwharris 2011-06-10 02:09:58

4 réponses

Je pense avoir trouvé la réponse:

convert(nvarchar(50), RequestID)

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

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

193
répondu DJTripleThreat 2011-06-09 22:14:07

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

convert(nvarchar(36), requestID) as requestID
72
répondu Philippe Grondier 2011-06-09 22:18:09

Après mon avis, uniquieidentifier / GUID n'est ni un varchar ni un nvarchar mais un char (36). Par conséquent, j'utilise

CAST(xyz AS char(36))
19
répondu Silvan Hofer 2015-09-03 11:43:52

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

8
répondu AussieAtHeart 2011-06-10 04:49:39