এসকিউএল সার্ভার: কেস স্টেটমেন্টে ইউনিক আইডেন্টিফায়ারকে স্ট্রিংয়ে রূপান্তর করা


136

আমাদের একটি লগ টেবিল রয়েছে যাতে একটি বার্তা কলাম থাকে যা কখনও কখনও ব্যতিক্রম স্ট্যাক ট্রেস থাকে। আমার কিছু মানদণ্ড রয়েছে যা নির্ধারণ করে যে বার্তাটির এটি রয়েছে কিনা। আমরা এই বার্তাগুলি গ্রাহককে দেখাতে চাই না তবে এর পরিবর্তে একটি বার্তা রয়েছে:

অভ্যন্তরীণ ত্রুটি ঘটেছে। রেফারেন্স কোড এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স

যেখানে এক্সএক্সএক্স ইত্যাদি হ'ল টেবিলে গাইড কলাম। আমি এইভাবে সঞ্চিত প্রকল্প লিখছি:

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এসকিউএল সার্ভারের একটি গাইড ডেটাটাইপ এবং এটি স্ট্রিংয়ে রূপান্তর করে না। আমি কীভাবে কোনও গাইডকে স্ট্রিংয়ে রূপান্তর করতে পারি তার কিছু কোড দেখেছি তবে এটি বহু-রেখাযুক্ত এবং আমি মনে করি না এটি কেস স্টেটমেন্টে কাজ করবে। কোন ধারনা?

উত্তর:


257

আমি মনে করি আমি উত্তরটি পেয়েছি:

convert(nvarchar(50), RequestID)

এই লিঙ্কটি যেখানে আমি এই তথ্যটি পেয়েছি তা এখানে:

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


21
বিকল্পভাবে, castালাই (অনুরোধ হিসাবে বর্ণাচরণ (50))
এমকে_দেব

3
Castালাই () এবং রূপান্তর () রূপান্তর মধ্যে মূল পার্থক্য কি?
আর কে শর্মা

5
@ আর কে শর্মা এটি আপনার কাছে স্ট্যাকওভারফ্লো ডটকম থেকে জিজ্ঞাসা করার জন্য বা এই সাইটটি অনুসন্ধান করার জন্য এটি একটি নিখুঁত প্রশ্ন যা ইতিমধ্যে কেউ এর উত্তর দিয়েছে কিনা তা দেখার জন্য।
অ্যারোনা

1
আমি জানি না কেন আমি বেছে নেব nvarchar, অনেক কম nvarchar(50)। একটি অনন্য শনাক্তকারী, যখন পাঠ্যের মানে রূপান্তরিত হয় তাকে হেক্স-ড্যাশ -36 এ চিকিত্সা করা হয়।
ব্যবহারকারী 2864740

9
অন্যান্য উত্তর যেমন বলে, আপনি এটি ঘনীভূত করতে পারেন cast(RequestID as char(36))
ফ্র্যাঙ্ক টান

90

এখানে রূপান্তর ফাংশনটি ব্যবহার করা সম্ভব তবে অনন্য সনাক্তকারী মান ধরে রাখতে 36 টি অক্ষরই যথেষ্ট:

convert(nvarchar(36), requestID) as requestID

2
দৈর্ঘ্য স্থির করা হলেও বর্ণাচরণ (৩)) এখানে যথেষ্ট
gdbdable

11
আপনি একই বাক্যে "স্থির" এবং এখনও "বর্ণচর" বলছেন ... কীভাবে char(36)? আপনি এটিও ব্যবহার করতে পারেন nchar(36)তবে কোনও জিইউইডিতে ইউনিকোড না থাকায় এটি আপনাকে কিছুই কিনে না। বিপরীতে, এর সাথে অপারেশনগুলি charসাধারণত তুলনায় দ্রুত হয় varchar
r2evans

47

আমার মতে, uniqueidentifier/ জিইউডি একটি varcharবা একটি nvarcharনয় তবে একটি char(36)। অতএব আমি ব্যবহার করি:

CAST(xyz AS char(36))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.