時々例外スタックトレースを持つメッセージ列を持つログテーブルがあります。メッセージにこれがあるかどうかを判断する基準がいくつかあります。これらのメッセージを顧客に見せたくありませんが、代わりに次のようなメッセージがあります。
内部エラーが発生しました。参照コード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ステートメントでは機能しないと思います。何か案は?
私は答えを見つけたと思います:
convert(nvarchar(50), RequestID)
この情報を見つけたリンクは次のとおりです。
ここで変換機能を使用することは可能ですが、一意の識別子の値を保持するには36文字で十分です。
convert(nvarchar(36), requestID) as requestID
私の意見では、uniqueidentifier
/GUIDはvarchar
でもnvarchar
でもなく、char(36)
です。したがって、私は使用します:
CAST(xyz AS char(36))
Str(RequestID)
の代わりに、convert(varchar(38), RequestID)
を試してください