इसे आजमाएं:
SELECT *
FROM OPENQUERY("FOO\SQL2012", 'SET FMTONLY OFF; EXEC mySchema.myStoredProc;') X;
इसका कारण यह है कि जब आप किसी लिंक किए गए सर्वर पर संग्रहीत कार्यविधि निष्पादित करते हैं, तो प्रदाता पहले परिणामी रोसेट के आकार को निर्धारित करने का प्रयास करता है। यह SET FMTONLY ON;
. जारी करके ऐसा करता है और फिर अपना बयान चला रहे हैं। एक संग्रहीत प्रक्रिया में जो अस्थायी तालिकाओं का उपयोग नहीं करता है, यह खूबसूरती से काम करता है। क्वेरी पार्सर मूल रूप से सभी डेटा, केवल मेटाडेटा (अनुमानित निष्पादन योजना दिखाने की तरह) प्राप्त किए बिना एक सूखा रन करता है।
समस्या यह है कि जब संग्रहीत कार्यविधि करती है अस्थायी तालिकाओं का उपयोग करें, यह विफल हो जाता है, क्योंकि अस्थायी तालिका का मेटाडेटा मौजूद नहीं है:इसे मेटा-विश्लेषण के माध्यम से एकत्र नहीं किया जा सकता है जो संग्रहीत प्रक्रियाओं के लिए काम करता है जो अस्थायी तालिकाओं का उपयोग नहीं करते हैं। तो इसका इलाज मैन्युअल रूप से SET FMTONLY OFF;
. करना है उस बैच के भीतर जो संग्रहित प्रक्रिया को क्रियान्वित कर रहा है।
ध्यान रखें कि इस विधि का उपयोग करने से संग्रहीत कार्यविधि दो बार चलेगी . पहली बार मेटाडेटा एकत्र करने के लिए (डेटा को त्याग दिया जा रहा है), और दूसरी बार वास्तव में डेटा वापस करने के लिए। यदि तथाकथित संग्रहीत प्रक्रिया विशेष रूप से महंगी है या इसके दुष्प्रभाव हैं, तो आपको भत्ते देने की आवश्यकता हो सकती है।
अंत में, ध्यान दें कि यह ट्रिक हर संग्रहित प्रक्रिया पर काम नहीं करती है। ऐसी चीजें हैं जो संग्रहीत प्रक्रियाएं कर सकती हैं जो कामों में बस एक रिंच फेंक देती हैं। मैं सभी संभावनाओं को नहीं जानता, लेकिन उनमें से एक एकाधिक रिकॉर्डसेट लौटा रहा है।
आपके अपडेट के जवाब में कि SET FMTONLY OFF
काम नहीं करता है:क्या आप संभवतः अपने एसपी को एक अस्थायी तालिका का उपयोग नहीं करने के लिए, या सत्र-कुंजी वाली स्थायी तालिका का उपयोग करने के लिए पुन:स्थापित कर सकते हैं? इनमें से कोई भी विकल्प काम कर सकता है। SQL सर्वर 2012 में, आपके पास table- के साथ डेटा पास करने का विकल्प भी है- मूल्यवान पैरामीटर
।
आप शायद एरलैंड सोमरस्कोग की संग्रहीत प्रक्रियाओं के बीच डेटा साझा करने का तरीका पढ़ना पसंद कर सकते हैं। क्योंकि यह आपको अपने उद्देश्य को पूरा करने के लिए प्रेरणा प्रदान कर सकता है।