Kami memiliki tabel log yang memiliki kolom pesan yang terkadang memiliki jejak tumpukan pengecualian. Saya memiliki beberapa kriteria yang menentukan apakah pesannya memiliki ini. Kami tidak ingin menampilkan pesan-pesan ini kepada pelanggan tetapi sebaliknya memiliki pesan seperti:
Terjadi Kesalahan Internal. Hubungi KAMI dengan kode referensi xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
di mana xxx dll adalah kolom pedoman di tabel. Saya menulis proc tersimpan seperti ini:
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
adalah datatype panduan dalam SQL Server dan tidak dikonversi ke string di sini. Saya telah melihat beberapa kode tentang cara mengkonversi Guid ke string, tetapi multi-baris dan saya pikir itu tidak akan berfungsi dalam pernyataan kasus. Ada ide?
sumber
nvarchar
, apalaginvarchar(50)
. Pengidentifikasi unik, ketika dikonversi ke nilai teks diperlakukan dalam hex-dash-36.cast(RequestID as char(36))
.Dimungkinkan untuk menggunakan fungsi konversi di sini, tetapi 36 karakter sudah cukup untuk menampung nilai pengidentifikasi unik:
sumber
char(36)
? Anda mungkin juga menggunakannchar(36)
, tetapi karena GUID tidak mengandung unicode, itu tidak memberi Anda apa pun. Sebaliknya, operasi denganchar
umumnya lebih cepat daripadavarchar
.Menurut pendapat saya,
uniqueidentifier
/ GUID bukanlah avarchar
atau anvarchar
tetapi achar(36)
. Karena itu saya menggunakan:sumber
Alih-alih
Str(RequestID)
, cobaconvert(varchar(38), RequestID)
sumber