SQL सर्वर 2012 इस सब बहुत आसान TRY_CONVERT(UNIQUEIDENTIFIER, expression)
SELECT something
FROM your_table
WHERE TRY_CONVERT(UNIQUEIDENTIFIER, your_column) IS NOT NULL;
एसक्यूएल सर्वर के पूर्व संस्करण के लिए के साथ, मौजूदा जवाब कुछ बिंदुओं का मतलब है कि वे या तो तार से मेल नहीं हो सकता है कि एसक्यूएल सर्वर होगा याद आती है बनाता है वास्तव में शिकायत के बिना UNIQUEIDENTIFIER
पर डाला गया या अभी भी अवैध कास्ट त्रुटियों के कारण समाप्त हो सकता है।
SQL सर्वर GUID को या तो {}
में लपेटता है या इसके बिना स्वीकार करता है।
इसके अतिरिक्त यह स्ट्रिंग के अंत में अपर्याप्त वर्णों को अनदेखा करता है। उदाहरण के लिए SELECT CAST('{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss' as uniqueidentifier)
और SELECT CAST('5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' as uniqueidentifier)
दोनों सफल हुए।
सबसे डिफ़ॉल्ट collations के तहत
LIKE '[a-zA-Z0-9]'
वर्ण मिलान खत्म हो जाएगा जैसे À
या Ë
अंत में अगर एक परिणाम में पंक्तियों कास्टिंग यह एक मामले अभिव्यक्ति में डाली प्रयास डाल करने के लिए के रूप में कास्ट हो सकती है महत्वपूर्ण है uniqueidentifier को WHERE
द्वारा पंक्तियों को फ़िल्टर करने से पहले।
तो (उधार @r0d30b0y's idea) एक थोड़ा और अधिक मजबूत संस्करण हो सकता है
;WITH T(C)
AS (SELECT '5D944516-98E6-44C5-849F-9C277833C01B'
UNION ALL
SELECT '{5D944516-98E6-44C5-849F-9C277833C01B}'
UNION ALL
SELECT '5D944516-98E6-44C5-849F-9C277833C01BXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
UNION ALL
SELECT '{5D944516-98E6-44C5-849F-9C277833C01B}ssssssssss'
UNION ALL
SELECT 'ÀD944516-98E6-44C5-849F-9C277833C01B'
UNION ALL
SELECT 'fish')
SELECT CASE
WHEN C LIKE expression + '%'
OR C LIKE '{' + expression + '}%' THEN CAST(C AS UNIQUEIDENTIFIER)
END
FROM T
CROSS APPLY (SELECT REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]') COLLATE Latin1_General_BIN) C2(expression)
WHERE C LIKE expression + '%'
OR C LIKE '{' + expression + '}%'
स्रोत
2012-10-02 16:49:44
मुझे समझ नहीं आता कि तुम क्या कर रहे हैं हासिल करने की कोशिश कर रहा है। आप उन सभी पंक्तियों का चयन करना चाहते हैं जहां एक निश्चित कॉलम का मान एक अद्वितीय पहचानकर्ता है? व्यापार परिदृश्य क्या है? और यदि कोई कॉलम एक अनोखा पहचानकर्ता रखने के लिए है, तो क्या इसका मूल्य या तो शून्य या वास्तव में एक अद्वितीय पहचानकर्ता नहीं होगा? यह और क्या हो सकता है? –
मैं नामों के लिए गाइड (बिल्ड सर्वर पर एकीकरण परीक्षण) का उपयोग कर डेटाबेस बना रहा हूं। मैं उन डेटाबेसों को सूचीबद्ध करना चाहता था (sys.databases से चुनें * जहां IsUniqueidentifier (नाम)) – Benoittr
आह, समझ गया - आप का मतलब यह नहीं है कि अद्वितीय पहचानकर्ता डेटाटाइप, केवल एक स्ट्रिंग है। –