2012-10-04 9 views
44

स्वीकार करने के लिए मैं पहले से ही के रूप में SQL सर्वर 2005 में एक समारोह है एक एसक्यूएल सर्वर समारोह में परिवर्तन। यदि मैं @Todate प्रदान करता हूं तो मैं फ़ंक्शन में तर्क जोड़ने जा रहा हूं, फिर मौजूदा कोड के साथ कुछ और जारी रखें।नई वैकल्पिक पैरामीटर

ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric,@ToDate DateTime=null) 
Returns varchar(100) AS 
Begin 
    <Function Body> 
End 

अब मैं के रूप में समारोह कॉल कर सकते हैं:

मैं समारोह के रूप में संशोधित

SELECT dbo.fCalculateEstimateDate(647,GETDATE()) 

लेकिन यह निम्नलिखित फोन पर त्रुटि देता है:

SELECT dbo.fCalculateEstimateDate(647) 

के रूप में

प्रक्रिया के लिए अपर्याप्त संख्या की मांग की गई थी या फ़ंक्शन dbo.fCalculateEstimateDate।

जो मेरी समझ के अनुसार नहीं होना चाहिए।

क्या मुझे कुछ याद आ रही है? अग्रिम धन्यवाद।

उत्तर

77
CREATE FUNCTION से

:

समारोह के एक पैरामीटर एक डिफ़ॉल्ट मान होता है तो कीवर्ड DEFAULT निर्दिष्ट किया जाना चाहिए जब समारोह डिफ़ॉल्ट मान को पुनः प्राप्त करने कहा जाता है। यह व्यवहार संग्रहीत प्रक्रियाओं में डिफ़ॉल्ट मानों के साथ पैरामीटर का उपयोग करने से अलग है जिसमें पैरामीटर को छोड़ना भी डिफ़ॉल्ट मान का तात्पर्य है।

तो तुम क्या करने की जरूरत:

SELECT dbo.fCalculateEstimateDate(647,DEFAULT) 
+1

क्या SELECT dbo.fCalculateEstimateDate (647) कॉल करने के लिए कोई तरीका है ?? – MaxRecursion

+23

नहीं। फ़ंक्शन के प्रत्येक कॉल में निर्दिष्ट पैरामीटर की एक ही संख्या होनी चाहिए। आप हमेशा दो पैरामीटर के साथ * नया * फ़ंक्शन बना सकते हैं, और 'dbo.fCalculateEstimateDate' को एक रैपर फ़ंक्शन में बदल सकते हैं जो नए फ़ंक्शन को कॉल करने के लिए बस दूसरा पैरामीटर जोड़ता है। –

+4

पृथ्वी पर क्यों यह संग्रहीत प्रक्रियाओं से अलग है? मुझे यकीन है कि आप केवल दूसरे पैरामीटर को छोड़ सकते हैं और यह सिर्फ काम करेगा! – Peter

16

तरह से रखने के लिए SELECT dbo.fCalculateEstimateDate(647) कॉल काम कर रहे है:

ALTER function [dbo].[fCalculateEstimateDate] (@vWorkOrderID numeric) 
Returns varchar(100) AS 
    Declare @Result varchar(100) 
    SELECT @Result = [dbo].[fCalculateEstimateDate_v2] (@vWorkOrderID,DEFAULT) 
    Return @Result 
Begin 
End 

CREATE function [dbo].[fCalculateEstimateDate_v2] (@vWorkOrderID numeric,@ToDate DateTime=null) 
Returns varchar(100) AS 
Begin 
    <Function Body> 
End 
+2

का उपयोग कर किसी सामान्य ज्ञान या डीबी वाले लोगों द्वारा लिखा गया था, क्या आप बस 'रिटर्न [डीबीओ] नहीं कह सकते हैं। [FCalculateEstimateDate_v2] (@ vWorkOrderID, DEFAULT) '? –

+0

हां! ज़रूर।यह ऐसा ही है – Gus

0

मैं निष्पादित आदेश के रूप में यहाँ T-SQL - function with default parameters सुझाव अच्छी तरह से काम करने के लिए मिल गया है। इस दृष्टिकोण के साथ फ़ंक्शन को कॉल करते समय कोई 'डिफॉल्ट' आवश्यक नहीं है, आप केवल पैरामीटर को छोड़ दें क्योंकि आप संग्रहीत प्रक्रिया के साथ करेंगे।

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