मुझे संदेह है कि आपके पास एक ही नाम की दो तालिकाएँ हैं। एक स्कीमा 'dbo' ( dbo.PerfDiag) के स्वामित्व में है, और दूसरा SQL सर्वर से कनेक्ट होने के लिए उपयोग किए जाने वाले खाते के डिफ़ॉल्ट स्कीमा (कुछ जैसी userid.PerfDiag) के स्वामित्व में है ।
जब आपके पास स्कीमा ऑब्जेक्ट (जैसे तालिका) के लिए एक अयोग्य संदर्भ होता है - स्कीमा नाम से योग्य नहीं - ऑब्जेक्ट संदर्भ को हल किया जाना चाहिए। नाम रिज़ॉल्यूशन निर्दिष्ट क्रम में किसी निर्दिष्ट ऑब्जेक्ट (तालिका) के लिए निम्न क्रम में खोज करने से होता है। नाम पहले मैच में हल होता है:
- उपयोगकर्ता के डिफ़ॉल्ट स्कीमा के तहत।
- स्कीमा 'dbo' के तहत।
अयोग्य संदर्भ उपरोक्त अनुक्रम में पहले मैच के लिए बाध्य है।
सामान्य अनुशंसित अभ्यास के रूप में, किसी को प्रदर्शन के कारणों के लिए हमेशा स्कीमा वस्तुओं के संदर्भ में अर्हता प्राप्त करनी चाहिए :
एक अयोग्य संदर्भ संग्रहीत कार्यविधि या क्वेरी के लिए कैश्ड निष्पादन योजना को अमान्य कर सकता है, क्योंकि स्कीमा जिस संदर्भ में बंधी थी वह संग्रहीत कार्यविधि या क्वेरी को निष्पादित करने वाले क्रेडेंशियल्स के आधार पर बदल सकती है। इसके परिणामस्वरूप क्वेरी / संग्रहीत कार्यविधि, एक प्रदर्शन हिट की पुन: स्थापना होती है। रीकॉम्पिलिकेशन के कारण संकलित ताले को बाहर निकाल दिया जाता है, जिससे दूसरे को आवश्यक संसाधन तक पहुंचने से रोक दिया जाता है।
नाम रिज़ॉल्यूशन क्वेरी निष्पादन को धीमा कर देता है क्योंकि ऑब्जेक्ट के संभावित संस्करण (जो 'dbo' के स्वामित्व में है) के समाधान के लिए दो जांच की जानी चाहिए। यह सामान्य मामला है। केवल एक बार जांच से नाम हल हो जाएगा यदि वर्तमान उपयोगकर्ता निर्दिष्ट नाम और प्रकार की वस्तु का मालिक है।
[आगे नोट करने के लिए संपादित]
अन्य संभावनाएं हैं (किसी विशेष क्रम में नहीं):
- आप उस डेटाबेस से नहीं जुड़े हैं जो आपको लगता है कि आप हैं।
- आप जिस SQL सर्वर आवृत्ति से आपको लगता है कि आप से जुड़े नहीं हैं।
अपने कनेक्ट स्ट्रिंग्स को दोबारा जांचें और सुनिश्चित करें कि वे SQL सर्वर इंस्टेंस नाम और डेटाबेस नाम को स्पष्ट रूप से निर्दिष्ट करते हैं।