दुर्भाग्य से, यह 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) - मेरा मानना है) को वापस लाता है जैसे कि प्रतिस्थापन फ़ंक्शन ने किया था। मैं यह जानने का नाटक नहीं कर सकता कि लिंक की गई सर्वर सेटिंग
का कौन सा संयोजन है और निहित कास्टिंग इसे सामने आने का कारण बनता है। उम्मीद है कि इस क्षेत्र में अधिक ज्ञान रखने वाला कोई व्यक्ति इसमें शामिल हो सकता है!