SQL सर्वर: केस स्टेटमेंट में स्ट्रिंग के लिए UniqueIdentifier को परिवर्तित करना


136

हमारे पास एक लॉग टेबल है जिसमें एक संदेश स्तंभ है जिसमें कभी-कभी एक अपवाद स्टैक ट्रेस होता है। मेरे पास कुछ मानदंड हैं जो यह निर्धारित करते हैं कि क्या संदेश में यह है। हम इन संदेशों को ग्राहक को दिखाना नहीं चाहते हैं, बल्कि इसके जैसे एक संदेश है:

आंतरिक त्रुटि हुई। संदर्भ कोड xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx के साथ हमसे संपर्क करें

जहां xxx आदि तालिका में एक गाइड कॉलम है। मैं इस तरह संग्रहीत संग्रह लिख रहा हूं:

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

RequestIDSQL सर्वर में एक गाइड डेटाटाइप है और यहां स्ट्रिंग में परिवर्तित नहीं होता है। मैंने एक गाइड को स्ट्रिंग में बदलने के बारे में कुछ कोड देखा है, लेकिन यह बहु-पंक्तिबद्ध है और मुझे नहीं लगता कि यह एक केस स्टेटमेंट में काम करेगा। कोई विचार?

जवाबों:


257

मुझे लगता है कि मुझे जवाब मिल गया:

convert(nvarchar(50), RequestID)

यहाँ लिंक है जहाँ मुझे यह जानकारी मिली है:

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


21
वैकल्पिक रूप से, कास्ट (संस्करण के रूप में अनुरोध (50))
MK_Dev

3
कास्ट () और कन्वर्ट () के बीच बुनियादी अंतर क्या है?
आरके शर्मा

5
@RKSharma जो आपके लिए stackoverflow.com पर पूछने या यह देखने के लिए कि क्या कोई पहले ही इसका उत्तर दे चुका है, इस साइट को खोजें।
अनारोना

1
मुझे नहीं पता कि मैं क्यों चुनूंगा nvarchar, बहुत कम nvarchar(50)। एक विशिष्ट पहचानकर्ता, जब एक पाठ मान को हेक्स-डैश -36 में परिवर्तित किया जाता है।
user2864740

9
जैसा कि अन्य उत्तर कहते हैं, आप इस पर विचार कर सकते हैं cast(RequestID as char(36))
फ्रैंक टैन

90

यहां कनवर्ट फ़ंक्शन का उपयोग करना संभव है, लेकिन विशिष्ट पहचानकर्ता मान रखने के लिए 36 वर्ण पर्याप्त हैं:

convert(nvarchar(36), requestID) as requestID

2
क्योंकि लंबाई भी तय है यहाँ तक कि varchar (36) यहाँ पर्याप्त है
gdbdable

11
आप एक ही वाक्य में "निश्चित" और फिर भी "वर्चर" कहते हैं ... कैसे के बारे में char(36)? आप उपयोग भी कर सकते हैं nchar(36), लेकिन चूंकि एक GUID में यूनिकोड नहीं है, यह आपको कुछ नहीं खरीदता है। इसके विपरीत, ऑपरेशन charआम तौर पर की तुलना में तेजी से होते हैं varchar
r2evans

47

मेरी राय में, uniqueidentifier/ GUID न तो एक है varcharऔर न ही एक nvarcharहै char(36)। इसलिए मैं उपयोग करता हूं:

CAST(xyz AS char(36))

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.