2009-09-10 21 views
9

मैं एक SQL क्वेरी कि एक निरंतर करने के लिए डेटाबेस में एक मूल्य की तुलना की है में एक स्तंभ की तुलना:एसक्यूएल मिलान संघर्ष जब एक अस्थायी तालिका

SELECT * FROM my_table 
INNER JOIN #TempTable tem 
    ON my_table.id = temp.id 
    AND my_table.key = 'SOME STRING' 

और मैं त्रुटि मिलती है:

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation. 

मैं इसके आसपास कैसे हो सकता हूं? (डेटाबेस में बदलाव किए बिना)

अद्यतन: मैं भले ही मैं पिछले (स्ट्रिंग तुलना) की तरह हटाने इस त्रुटि मिलती है ...

उत्तर

13

लगता है अपने id के अलग collations के साथ VARCHAR रों हैं।

इस प्रयास करें:

SELECT * 
FROM my_table 
INNER JOIN 
     #TempTable tem 
ON  my_table.id = temp.id COLLATE SQL_Latin1_General_CP1_CI_AS 
     AND my_table.key = 'SOME STRING' 
+0

धन्यवाद, मैंने देखा hadnt कि मेरी आईडी के पात्रों थे। – Justin

+0

बहुत बढ़िया मुझे चुटकी में मदद की। आश्चर्य की बात है कि मुझे यह दो अस्थायी तालिकाओं के बीच मिला लेकिन किसी भी तरह से इस मुद्दे को हल करने के लिए काम किया। –

5

अपने अस्थायी तालिका की घोषणा के अंदर मिलान निर्दिष्ट करें।

CREATE TABLE #TempTable (ID NVARCHAR(255) COLLATE database_default) 
+0

+1 लेकिन ओपी ने समस्या का गलत निदान किया। समस्या कॉलम आईडी था, कुंजी नहीं। मैंने इस तरह के प्रतिबिंबित करने के लिए आपके उत्तर को समायोजित कर दिया है। –

2

समस्या temp तालिका है। यह tempdb के संयोजन का उपयोग करता है।

आप अपने वास्तविक डीबी में एक टेबल बना सकते हैं, न कि एक temp टेबल और फिर वे एक ही संयोजन होगा। या temp तालिका बनाने पर collation निर्दिष्ट करें।

+2

सत्य नहीं है - अस्थायी तालिका कैसे बनाई गई थी, इस पर निर्भर करता है, यह या तो आपके द्वारा डेटाबेस में एकत्रित हो जाएगा, या tempdb का संयोजन - मास्टर नहीं। यदि अस्थायी तालिका स्पष्ट रूप से बनाई गई है (तालिका #temp बनाएं) तो यह tempdb से संयोजन लेता है। यदि तालिका किसी अन्य तालिका से ली गई है (चयन करें * mytable से #temp में) तो यह स्रोत तालिका से संयोजन लेता है। –

+0

अच्छा बिंदु ... क्योंकि वे एक ही समय में बनाए जाते हैं I * गलत * आमतौर पर tempdb के संयोजन को खोजने के लिए मास्टर के संयोजन को देखते हैं। सही उत्तर शामिल करने के लिए संपादित किया गया। ता :) –

+0

अपने वास्तविक डीबी में 'सामान्य-अस्थायी' तालिका बनाकर काम करने के लिए बुरी सलाह। यह सुनिश्चित करने के लिए दो तकनीकें हैं कि अस्थायी तालिका एक संगत संयोजन का उपयोग करती है: केवी रिली एक देता है, (http://stackoverflow.com/a/1404916/224704) में दूसरा है। –

0

कोशिश

SELECT * FROM my_table 
INNER JOIN #TempTable temp  
    ON my_table.id = temp.id collate database_default 
    AND my_table.key = 'SOME STRING' 
संबंधित मुद्दे