2011-01-15 14 views
12

मुझे कुछ अनुमतियां गलत होनी चाहिए, लेकिन मैं यह नहीं समझ सकता कि कैसे। निम्नलिखित कोड सरल है, लेकिन मैं भी इस काम करने के लिएSQLServer संग्रहीत प्रक्रिया में मेरे उपयोगकर्ता परिभाषित फ़ंक्शन फ़ंक्शन को नहीं ढूंढ सकता

CREATE FUNCTION ufTest 
(
    @myParm int 
) 
RETURNS int 
AS 
BEGIN 
    DECLARE @Result int 

    SELECT @Result = @myParm + 1 

    RETURN @Result 
END 
GO 

तो मैं सिर्फ एक संग्रहीत प्रक्रिया से समारोह कॉल करने के लिए सक्षम होना चाहते हैं नहीं मिल सकता है:

CREATE PROCEDURE dbo.[uspGetGroupProfileService] 
@id  int 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @otherId int; 
    SET @otherId = dbo.ufTest(@id); 
END 

SQLServer मुझे उस कह रहता है यह dbo.ufTest नहीं मिल रहा है। यह [डीबी] \ प्रोग्राममेबिलिटी \ फंक्शंस \ स्केलर-मूल्यवान कार्यों के तहत दिखाया गया है लेकिन मैं इसका उपयोग नहीं कर सकता हूं।

किसी को भी कोई विचार है कि मैं क्या गलत कर रहा हूं?

+1

क्या आप वाकई 'डीबीओ' स्कीमा में बनाए जा रहे हैं? यह आपकी डिफ़ॉल्ट स्कीमा जो भी हो जाएगा उसे डाल दिया जाएगा। –

+0

क्या होता है जब आप एसपी से कोड को बैच के रूप में चलाने का प्रयास करते हैं (हार्डकोडेड मान या जो भी हो)? –

+0

संग्रहित प्रो बस ठीक है। मेरे पास बस कुछ अलग-अलग संग्रहित प्रोसेस में कुछ कोड है जो मैं किसी फ़ंक्शन पर जाना चाहता हूं। यह वास्तव में यह मुश्किल नहीं होना चाहिए। मुझे लगता है कि यह –

उत्तर

10

मेरे लिए काम करता है।

CREATE FUNCTION dbo.ufTest ...

प्रयास करें मुझे लगता है अपने डिफ़ॉल्ट स्कीमा dbo नहीं किया जा सकता और यह एक अलग स्कीमा में समाप्त कर रहा है। अन्यथा एकमात्र स्पष्टीकरण जो मैं सोच सकता हूं वह है कि आपको अनुमतियां देने की आवश्यकता हो सकती है।

+1

+1: 2005 के लिए भी मेरे लिए काम करता है। यदि प्रक्रिया किसी भिन्न डेटाबेस में बनाई गई है, तो फ़ंक्शन को तीन नाम नोटेशन को ठीक से संदर्भित करने की आवश्यकता होगी। –

+0

कोई पासा नहीं। यदि आप मेरी मूल पोस्ट का अंत देखते हैं। यह प्रबंधन स्टूडियो में उचित डेटाबेस के तहत दिख रहा है। –

+3

क्या आप इन ऑब्जेक्ट्स को बनाने के लिए उपयोग किए गए खाते के तहत एसएसएमएस में स्केलर फ़ंक्शन पर राइट क्लिक कर सकते हैं, "स्क्रिप्ट फ़ंक्शन का चयन करें ..." चुनें पैरामीटर मान भरें और इसे स्टैंडअलोन निष्पादित करें? यदि हाँ, क्या आप इसे उसी खाते के तहत एसएसएमएस में संग्रहीत प्रक्रिया से निष्पादित कर सकते हैं? यदि हां और समस्या आपके आवेदन में है तो आपको 'अनुदान [डीबीओ] पर लागू करने की आवश्यकता होगी। [UfTest] 'TO' [username]' क्या आप केवल इंटेलिजेंस दावों को नहीं छोड़ रहे हैं? –

3

यूडीएफ को स्क्रिप्ट करें और स्कीमा नाम की जांच करें। यह शायद डीबीओ नहीं है। मैं विशेष रूप से डीबीओ शामिल करने के लिए यूडीएफ परिभाषा को बदल दूंगा। दूसरे शब्दों में:

CREATE FUNCTION dbo.ufTest 
+0

इसे dbo.ufTest के रूप में बनाया गया था, लेकिन मैंने इसे जोड़ने का प्रयास किया और अभी भी कोई पासा नहीं था। –

0

इसे सेट के बजाय चयन के साथ कॉल करने का प्रयास करें। और आपने जांच की है कि डीबीओ स्कीमा से संबंधित है?

+0

चुनिंदा चाल का भी प्रयास किया, लेकिन यह वास्तव में केवल तभी उचित है जब आप तालिका –

+0

लौट रहे हों या जब एक बार में कई मान निर्दिष्ट करते हैं या जब आप किसी क्लॉज का उपयोग करते हैं या जब ufTest नामक फ़ंक्शन के अंदर होते हैं;) लेकिन उस तरफ यह शून्य को संभालता है अलग-अलग मूल्य जो आपके मामले का उपयोग कर रहे हैं, एक शॉट के लायक था। आपको वहां एक पागल गैर प्रतिकृति समस्या मिली है, शुभकामनाएँ! – Malk

+0

एकाधिक मान निर्दिष्ट करके आपका क्या मतलब है? एकाधिक तर्क? असल में यह पता चला कि यह केवल एसएसएमएस क्वेरी संपादक में झूठी गलती दे रहा था, इसलिए मैंने इसे वास्तव में चलाने की कोशिश नहीं की। –

0

ऐसा लगता है कि यह क्वेरी संपादक में एक बग हो सकता है। फंक्शन में सही जगह पर फ़ंक्शन दिखाई देता है लेकिन फ़ंक्शन dbo.xxxxxx फ़ंक्शन नामकरण तब तक क्वेरी एडिटर में दिखाई नहीं देता जब तक आप एक नया सत्र बंद नहीं करते और खोलते हैं, तो ऐसा लगता है कि यदि आप dbo टाइप करते हैं।

यदि आप फ़ंक्शन का नाम बदलते हैं तो पुरानी गैर मौजूदा फक्शन उपलब्ध नहीं है लेकिन नया नाम नहीं है। ताज़ा करें यह केवल सत्र को बंद करने और एक नया शुरू करने में ठीक नहीं करता है।

क्यों मैं कहता हूं कि यह एक बग हो सकता है कि तालिका फ़ंक्शन के लिए अनुमति गुण स्कीमा गुणों के लिए नीले लिंक को शामिल करते हैं लेकिन स्केलर फ़ंक्शंस यह नहीं करता है। तो यह पहली जगह में स्कीमा की स्थापना के तरीके में एक गहरी झूठी बग हो सकती है जिसके लिए एक काम हो सकता है। या शायद मैं जिस डेटाबेस पर काम कर रहा हूं उसमें स्कीमा सही तरीके से स्थापित नहीं किया गया है।

उम्मीद है कि कोई और इस मुद्दे पर कुछ प्रकाश डाल सकता है।

0

क्या वही समस्या थी और मेरा बस SQL ​​सर्वर प्रबंधन स्टूडियो को पुनरारंभ करके ठीक हो गया था।

किसी और ने सब कुछ सही करने के मामले में बस पोस्ट किया और अभी भी अपने कार्य को कॉल करने में सक्षम नहीं है।

0

एक पिछले उपाय के रूप में करता है, तो ऊपर और विशेष रूप से @ jrdev22 का जवाब आप मदद नहीं की (और छोड़ दिया आप स्टम्प्ड क्यों) के किसी भी, एसक्यूएल सर्वर Configuration Manager में सेवा पुनः आरंभ के बाद से अकेले SSMS को पुन: प्रारंभ कभी कभी रीसेट नहीं होता सब कुछ (उदाहरण के लिए एक नया लॉगिन उदाहरण बनाते समय, लेकिन इसके साथ लॉगिन करने में सक्षम नहीं है)।

SQL Server Configuration Manager> SQL Server Services > SQL Server > Restart 
0

आप समारोह है कि आपने अभी बनाया है खोजने में असमर्थ हैं, तो इसके लिए दो कारण हैं।

  1. आप गलत फ़ंक्शन नाम का उपयोग कर रहे हैं जिसे आपको प्राप्त करने के लिए dbo.function नाम जोड़ने की आवश्यकता है।
  2. मुझे एक और समस्या भी मिली है, भले ही सही नाम दर्ज किया गया हो और यह ऑब्जेक्ट एक्सप्लोरर में भी मौजूद हो, फिर भी जब आप फ़ंक्शन का उपयोग करने का प्रयास कर रहे हों तो आप इसे खोजने में असमर्थ हैं।

इस मामले में बस एसक्यूएल सर्वर को बंद करें और इसे फिर से खोलें और आपको फ़ंक्शन देखने में सक्षम होना चाहिए।

संबंधित मुद्दे