2012-02-23 16 views
9

निष्पादित कर सकता है मैं SQL सर्वर के लिए नया हूं और अपनी पहली संग्रहीत प्रक्रिया बनाई है। यह ठीक निष्पादित करता है और मैं 'Programmability' के तहत यह पता लगा सकते हैं, 'संग्रहित प्रक्रिया' तो मैं एक नई क्वेरी और प्रकार को खोल निम्नलिखित बयानों में पॉप:संग्रहीत प्रक्रिया नहीं मिल सका, हालांकि इसे

use name_of_database 
exec name_of_stored_procedure 'value' 

हालांकि संग्रहीत प्रक्रिया, संग्रहीत के नाम निष्पादित करने से पहले प्रक्रिया को रेड नोटिंग में रेखांकित किया गया है, यह नहीं मिला है, इसलिए मैं क्वेरी चलाता हूं:

select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure' 

नाडा। यह कुछ भी नहीं देता है।

हालांकि अगर मैं आगे बढ़ता हूं और संग्रहित प्रक्रिया निष्पादित करता हूं, तो यह ठीक काम करता है।

मैं क्या गलत कर रहा हूं?

+0

यदि 'INFORMATION_SCHEMA' क्वेरी कुछ भी नहीं लौटा, तो मुझे नहीं लगता कि IntelliSense कैश आपकी समस्या थी (या कम से कम आपका एकमात्र मुद्दा नहीं)। ऐसा लगता है कि आप सही डेटाबेस के संदर्भ में नहीं थे। –

उत्तर

23

एसएसएमएस के लिए आपको इंटेलिसेंस कैश (Ctrl + Shift + R) को साफ़ करने की आवश्यकता है। फिर लाल squiggly लाइन गायब हो जाएगा और Intellisense आपको इसके साथ मदद करेगा।

यदि आप प्रोग्रामिंग योग्यता के तहत अपनी संग्रहीत प्रक्रिया को देख सकते हैं -> आपके ऑब्जेक्ट एक्सप्लोरर में संग्रहीत प्रक्रियाएं, तो आप इसे अपने select * from information_schema.routines ... क्वेरी के माध्यम से देख पाएंगे। अपने डेटाबेस संदर्भ, साथ ही शेष क्वेरी की जांच करें। where खंड निकालें और पूरे परिणाम सेट को देखें।

+0

बहुत बढ़िया। उसने जादू की तरह काम किया। SQL सर्वर प्रबंधन स्टूडियो कितनी बार मेरे कैश को दर्ज किए बिना (CTRL + Shift + R) दर्ज करता है? – PeanutsMonkey

+0

@PeanutsMonkey अच्छा सवाल। मुझे इसका जवाब नहीं पता। एसएसएमएस में सेट करने का कोई विकल्प नहीं है (जिसे मैं जानता हूं)। यह केवल आवश्यक कीस्ट्रोक हिट करने की आदत बन जाएगा। मुझे व्यक्तिगत रूप से परेशान नहीं करता है। –

+0

धन्यवाद दोस्त। मैं यहाँ सोच रहा था कि मैं क्या गलत कर रहा हूं। – PeanutsMonkey

0

मेरा अनुमान है कि आप सिर्फ एक अलग डेटाबेस, शायद गुरु के खिलाफ 2 क्वेरी चलाने सकता है, की कोशिश:

use 'name_of_database' 
select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_NAME = 'name_of_stored_procedure' 

और फिर आप यह देखने के लिए सक्षम होना चाहिए

+0

मुझे संदेह था कि हालांकि आपने सुझाव दिया था कि आपने वही आदेश चलाया है, हालांकि यह कुछ भी नहीं देता है। – PeanutsMonkey

+0

यह दिलचस्प है, क्या यह क्लॉज में नाम का एक टाइपो होगा? –

+0

नहीं। शार्क ने संकेत दिया, मुझे बस इतना करना था कि कैश साफ़ हो गया। – PeanutsMonkey

2

यह संभव है कि है आपकी प्रक्रिया dbo के अलावा एक स्कीमा में है? वस्तुओं को बनाने और संदर्भित करते समय आपको हमेशा स्कीमा निर्दिष्ट करना चाहिए। as described here के कई कारण हैं। अनिवार्य रूप से, जब आप स्कीमा निर्दिष्ट नहीं करते हैं, तो आपके पास प्रक्रिया बनाने या कॉल करने वाले उपयोगकर्ता की डिफ़ॉल्ट स्कीमा के आधार पर भ्रमित व्यवहार के सभी प्रकार हो सकते हैं।

वस्तुओं के अस्तित्व की जांच करते समय आपको स्कीमा को ध्यान में रखना चाहिए।

आपको sys.procedures में प्रक्रियाओं की जांच करनी चाहिए। coding consistently here पर कुछ पृष्ठभूमि जानकारी, क्योंकि आप हमेशा INFORMATION_SCHEMA से जानकारी प्राप्त नहीं कर सकते हैं।

2

मैं एक ही मुद्दा था और मैं वर्ग कोष्ठक बस का उपयोग करके इसे तय

EXEC [dbo].[procedureName] 

आशा है कि यह किसी को बाद में :)

+1

यह एकमात्र समाधान था जो मेरे लिए काम करता था। मैंने प्रबंधन स्टूडियो को बंद कर दिया और खोला, लेकिन जब तक मैं स्क्वायर ब्रैकेट नहीं जोड़ता तब तक यह काम नहीं करता था। – sch4v4

1

मेरे मामले में मदद करता है मैं इस तरह से बस समस्या हल:

  1. जब भी मैंने प्रक्रिया बनाई, तो मैं एक बार एमएसएसक्यूएल सर्वर स्टूडियो पर प्रक्रिया निष्पादित करता हूं। तो मुझे db_name=>Programmibility=>Stored Procedure में स्कीमा के साथ बनाई गई प्रक्रिया मिली।
  2. अंततः मैंने इसे अपने सी # कोड से बुलाया। और हल हो गया !!!
संबंधित मुद्दे