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

11526 त्रुटि के साथ नई अस्थायी तालिका बनाने के लिए OPENQUERY (संग्रहित प्रक्रिया निष्पादित करें) का उपयोग करना विफल रहता है

इसे आजमाएं:

SELECT *
FROM OPENQUERY("FOO\SQL2012", 'SET FMTONLY OFF; EXEC mySchema.myStoredProc;') X;

इसका कारण यह है कि जब आप किसी लिंक किए गए सर्वर पर संग्रहीत कार्यविधि निष्पादित करते हैं, तो प्रदाता पहले परिणामी रोसेट के आकार को निर्धारित करने का प्रयास करता है। यह SET FMTONLY ON; . जारी करके ऐसा करता है और फिर अपना बयान चला रहे हैं। एक संग्रहीत प्रक्रिया में जो अस्थायी तालिकाओं का उपयोग नहीं करता है, यह खूबसूरती से काम करता है। क्वेरी पार्सर मूल रूप से सभी डेटा, केवल मेटाडेटा (अनुमानित निष्पादन योजना दिखाने की तरह) प्राप्त किए बिना एक सूखा रन करता है।

समस्या यह है कि जब संग्रहीत कार्यविधि करती है अस्थायी तालिकाओं का उपयोग करें, यह विफल हो जाता है, क्योंकि अस्थायी तालिका का मेटाडेटा मौजूद नहीं है:इसे मेटा-विश्लेषण के माध्यम से एकत्र नहीं किया जा सकता है जो संग्रहीत प्रक्रियाओं के लिए काम करता है जो अस्थायी तालिकाओं का उपयोग नहीं करते हैं। तो इसका इलाज मैन्युअल रूप से SET FMTONLY OFF; . करना है उस बैच के भीतर जो संग्रहित प्रक्रिया को क्रियान्वित कर रहा है।

ध्यान रखें कि इस विधि का उपयोग करने से संग्रहीत कार्यविधि दो बार चलेगी . पहली बार मेटाडेटा एकत्र करने के लिए (डेटा को त्याग दिया जा रहा है), और दूसरी बार वास्तव में डेटा वापस करने के लिए। यदि तथाकथित संग्रहीत प्रक्रिया विशेष रूप से महंगी है या इसके दुष्प्रभाव हैं, तो आपको भत्ते देने की आवश्यकता हो सकती है।

अंत में, ध्यान दें कि यह ट्रिक हर संग्रहित प्रक्रिया पर काम नहीं करती है। ऐसी चीजें हैं जो संग्रहीत प्रक्रियाएं कर सकती हैं जो कामों में बस एक रिंच फेंक देती हैं। मैं सभी संभावनाओं को नहीं जानता, लेकिन उनमें से एक एकाधिक रिकॉर्डसेट लौटा रहा है।

आपके अपडेट के जवाब में कि SET FMTONLY OFF काम नहीं करता है:क्या आप संभवतः अपने एसपी को एक अस्थायी तालिका का उपयोग नहीं करने के लिए, या सत्र-कुंजी वाली स्थायी तालिका का उपयोग करने के लिए पुन:स्थापित कर सकते हैं? इनमें से कोई भी विकल्प काम कर सकता है। SQL सर्वर 2012 में, आपके पास table- के साथ डेटा पास करने का विकल्प भी है- मूल्यवान पैरामीटर

आप शायद एरलैंड सोमरस्कोग की संग्रहीत प्रक्रियाओं के बीच डेटा साझा करने का तरीका पढ़ना पसंद कर सकते हैं। क्योंकि यह आपको अपने उद्देश्य को पूरा करने के लिए प्रेरणा प्रदान कर सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिका बदलें और त्रुटि में UNIQUE कुंजी परिणाम जोड़ें

  2. SQL सर्वर डेटाबेस में प्राथमिक कुंजी बाधा क्या है - SQL सर्वर / T-SQL ट्यूटोरियल भाग 54

  3. एंटिटी फ्रेमवर्क सभी विदेशी कुंजी स्तंभों को अनुक्रमित करता है

  4. SQL सर्वर:sql क्वेरी का उपयोग करके तालिका प्राथमिक कुंजी प्राप्त करें

  5. बैच के माध्यम से SQL संग्रहीत कार्यविधियों को .sql फ़ाइलों में कैसे सहेजें