2009-08-10 12 views
8

मेरी वर्तमान परियोजना में एक शानदार प्रदर्शन के कारण, हमारे पास एक तालिका में एक वर्चर कॉलम में संग्रहीत कुछ ग्रिड हैं, जिन्हें किसी दूसरे में एक अद्वितीय पहचानकर्ता कॉलम से तुलना करने की आवश्यकता है।वाराकर और अनन्य इंडेंटिफायर की तुलना करें

मैं यह कैसे कर सकता हूं? एसक्यूएल सर्वर बस कहता है कि यह एक चरित्र स्ट्रिंग से एक अद्वितीय पहचानकर्ता में परिवर्तित नहीं कर सकता है।

उत्तर

15

यदि एसक्यूएल शिकायत करता है कि इसे कास्ट नहीं किया जा सकता है तो इसका मतलब यह नहीं है कि आपने केवल अद्वितीय पहचानकर्ता को वर्चर के रूप में संग्रहीत किया है, आपने SQL सर्वर से भिन्न प्रारूप का उपयोग किया है (उदाहरण के लिए आपने '{' और '}' जोड़ा है)। एसक्यूएल UniqueIdentifier को जब ठीक से स्वरूपित स्ट्रिंग कास्टिंग पूरी तरह से सक्षम है:

declare @u uniqueidentifier; 
declare @s varchar(64); 

select @u = NEWID(); 
select @s = CAST(@u as varchar(64)); 
select CAST(@s as uniqueidentifier), @u, @s; 

कैसे आप वास्तव में uniqueidentifier संग्रहीत के आधार पर, आप सबसे अधिक संभावना डेटा tomodify है और अपने कोड एसक्यूएल प्रारूप से मिलान करने के लिए होगा (कोई {}) ।

5

varchar को uniqueidentifier कन्वर्ट:

CAST(uniqueidentifier_col_name as varchar) 
+0

आप किसी एक varchar लेकिन varchar (50) पर कास्ट नहीं कर सकते हैं अर्थात –

1

आप varchar करने के लिए अन्य uniqueidentifier कास्ट करने के लिए होगा।

एसक्यूएल सर्वर शायद "बॉब" जैसी चीजों को अनन्य पहचानकर्ता को डालने की कोशिश कर रहा है और यह विफल हो जाता है। CAST/CONVERT के अनुसार इसकी अनुमति है, इसलिए यह वर्चर कॉलम में मान होना चाहिए।

4

मैं सिर्फ निम्नलिखित परीक्षण स्क्रिप्ट ऊपर काम किया: - एसक्यूएल (2005) अंतर्निहित रूपांतरण करता है एक SSMS विंडो में या slqcmd मैं फ़ाइल के माध्यम से

DECLARE 
    @Foo Uniqueidentifier 
,@Foo2 varchar(50) 

SET @Foo = newid() 
SET @Foo2 = newId() 

print @Foo 
print @Foo2 

if @Foo = @Foo2 
    print 'Yes' 
else 
    print 'No' 

set @Foo = @Foo2 

if @Foo = @Foo2 
    print 'Yes' 
else 
    print 'No' 

भागो, परिणाम एक ही हैं। जब मैं साल पहले इसी तरह की समस्या थी तो यह SQL 2000 से मुझे याद करता है।

  • 8 हेक्स अंक
  • पानी का छींटा
  • 4 हेक्स अंक
  • पानी का छींटा
  • 4 हेक्स अंक
  • :

    कुंजी बात यह है कि varchar स्ट्रिंग GUID पैटर्न से मेल खाना चाहिए है

  • डैश
  • 4 हेक्स अंक
  • पानी का छींटा
  • 12 हेक्स अंक
संबंधित मुद्दे