web-dev-qa-db-ja.com

SQL Server:CaseステートメントでUniqueIdentifierを文字列に変換する

時々例外スタックトレースを持つメッセージ列を持つログテーブルがあります。メッセージにこれがあるかどうかを判断する基準がいくつかあります。これらのメッセージを顧客に見せたくありませんが、代わりに次のようなメッセージがあります。

内部エラーが発生しました。参照コード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はSQL ServerのGuidデータ型であり、ここでは文字列に変換しません。 Guidを文字列に変換する方法に関するコードを見てきましたが、それは複数行であり、caseステートメントでは機能しないと思います。何か案は?

112
triplethreat78

私は答えを見つけたと思います:

convert(nvarchar(50), RequestID)

この情報を見つけたリンクは次のとおりです。

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

220
triplethreat78

ここで変換機能を使用することは可能ですが、一意の識別子の値を保持するには36文字で十分です。

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

私の意見では、uniqueidentifier/GUIDはvarcharでもnvarcharでもなく、char(36)です。したがって、私は使用します:

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

Str(RequestID)の代わりに、convert(varchar(38), RequestID)を試してください

8
AussieAtHeart