Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मुझे दो SQL प्रश्नों से ये भिन्न परिणाम क्यों मिलते हैं?

दुर्भाग्य से, यह SQL सर्वर में स्ट्रिंग संयोजन का एक अविश्वसनीय तरीका है। मैं इसे सभी मामलों में सबसे तुच्छ मामलों से बचूंगा। इस KB में कुछ और जानकारी है:निष्पादन योजना और समग्र संयोजन प्रश्नों के परिणाम निर्भर करते हैं अभिव्यक्ति स्थान

उस ने कहा, मैं आपकी समस्या की नकल करने और अपने परिवेश में समाधान प्रदान करने में सक्षम था:

SET @val = ''
SELECT @val = @val + 'Hello, my name is ' + replace([name], '', '') + '!' + CHAR(10) + CHAR(13)
FROM LINKED.A.sys.tables

ध्यान दें कि मैंने अभिव्यक्ति में एक खाली प्रतिस्थापन फ़ंक्शन जोड़ा है। हालांकि इसे आउटपुट के लिए कुछ नहीं करना चाहिए, यह एक स्थानीय . जोड़ता है क्वेरी योजना के लिए "गणना अदिश" चरण। ऐसा लगता है कि नाम कॉलम से सभी डेटा को स्थानीय रूप से संसाधित करने के लिए दूरस्थ क्वेरी को वापस करने की बजाय स्थानीय रूप से संसाधित किया जा सकता है।

मुझे यकीन नहीं है कि बदलें खाली तर्कों के साथ। शायद एक डबल रिवर्स या कुछ और। दस्तावेज़ीकरण में कहा गया है कि यदि आवश्यक हो तो अधिकतम डेटाटाइप को डालना सुनिश्चित करें।

अपडेट करें

बस @var . घोषित करना varchar(max) . के रूप में के बजाय nvarchar(max) समस्या को साफ करता है, क्योंकि यह स्थानीय प्रसंस्करण के लिए पूरे नाम कॉलम (प्रकार sysname - या nvarchar (128) - मेरा मानना ​​​​है) को वापस लाता है जैसे कि प्रतिस्थापन फ़ंक्शन ने किया था। मैं यह जानने का नाटक नहीं कर सकता कि लिंक की गई सर्वर सेटिंग का कौन सा संयोजन है और निहित कास्टिंग इसे सामने आने का कारण बनता है। उम्मीद है कि इस क्षेत्र में अधिक ज्ञान रखने वाला कोई व्यक्ति इसमें शामिल हो सकता है!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WinRT System.Data - SQL से कनेक्ट करें

  2. SQL सर्वर कंप्यूटेड कॉलम EntityFramework में कैसे काम करते हैं?

  3. SQL अगर रिकॉर्ड इससे पहले के रिकॉर्ड के बराबर है

  4. SQL सर्वर 2008 में लीड () और एलएजी () कार्यक्षमता

  5. एक ही टेबल पर उप क्वेरी के आधार पर तालिका में पंक्ति अद्यतन कर रहा है