2010-03-21 12 views
13

मैंने अपने छोटे वेब एप्लिकेशन के लिए SQL Server 2005 का उपयोग किया। मैं एसपी को पास पैरामीटर चाहते हैं। लेकिन एक शर्त है। पैरामीटर की संख्या जिसे समय-समय पर बदला जा सकता है। सोचो, इस बार मैं नाम और पता, अगली बार जब मैं नाम, उपनाम, पता गुजरती हैं,एक SQL सर्वर संग्रहीत प्रक्रिया में पैरामीटर की एक चर संख्या को कैसे पास करें?

इस पैरामीटर रेंज 1-30 हो सकता है, पारित

उत्तर

6

आपको कम से सपा पैरामीटर के लिए डिफ़ॉल्ट मान सेट कर सकते हैं स्तर ताकि पैरामीटर वैकल्पिक हो जाएं।

उदा।

CREATE PROCEDURE dbo.Test 
@param1 int, -- Not an optional 
@param2 int = 10, --Optional 
@param3 bit = 0, --Optional 
@param4 varchar(50) = '', --Optional 
@param5 nvarchar(100) = null --Optional 
-- more parameters ..... 
AS 
BEGIN 

-- The SQL goes here... 

END 

तो फिर तुम अपनी पसंद पर वैकल्पिक पैरामीटर भरे जा सकते हैं।

12

आप डिफ़ॉल्ट पैरामीटर के साथ प्रक्रिया घोषित करने और आप नाम वाले पैरामीटर स्थितीय मापदंडों के बजाय साथ यह आह्वान:

CREATE PROCEDURE usp_myProcedure 
    @name varchar(100) = '', 
    @surname varchar(100) = '', 
    @address varchar(100) = '' 
AS 
BEGIN 
... 
END 

T-SQL से यह आह्वान करने के लिए:

exec usp_myProcedure @name='John', @surname = 'Doe'; 
exec usp_myProcedure @name='Jane', @address = '123 Anystreet'; 

सी # से यह आह्वान करने के लिए :

SqlCommand cmd = new SqlCommand('usp_MyProcedure', ...); 
cmd.CommandType = commandtype.StoredProcedure; 
cmd.Parameters.AddWithValue('@name', 'John'); 
cmd.Parameters.AddWithValue('@surname', 'Doe'); 
10

आप एक्सएमएल प्रकारों का उपयोग कर सकते हैं। यहां एक नमूना प्रक्रिया है:

 
CREATE PROCEDURE udsp_VariableParams(@params XML) 
AS 
BEGIN 
    DECLARE @vdoc INT 
    EXEC sp_xml_preparedocument @vdoc OUTPUT, @params 
    SELECT * FROM OPENXML(@vdoc, '/params/param', 1) WITH ([paramname] VARCHAR(40), [paramvalue] VARCHAR(150)) 
    EXEC sp_xml_removedocument @vdoc  
END 

EXEC udsp_VariableParams 
    '<params> 
    <param paramname="name" paramvalue="value"/> 
    <param paramname="address" paramvalue="value"/> 
    </params>' 

EXEC udsp_VariableParams 
    '<params> 
    <param paramname="name" paramvalue="value"/> 
    <param paramname="surname" paramvalue="value"/> 
    <param paramname="address" paramvalue="value"/> 
    </params>' 
+2

मुझे लगता है कि यह ओपीएस समस्या के लिए अधिक है - लेकिन लगता है कि यह वर्तमान में एक समस्या के लिए वास्तव में उपयोगी हो सकता है! :) धन्यवाद! +1 –

1

एक्सएमएल से टैग तैयार करना और निकालना अपरिवर्तनीय हत्यारा है। असंगत निष्पादन समय इस बात पर निर्भर करता है कि क्या योजना कैश की गई है या नहीं।

इसके बजाय NVARCHAR (MAX) का उपयोग करना एक बेहतर विकल्प है। बस आपको "@ name = value" जोड़ी के साथ पैरामीटर स्ट्रिंग तैयार करें, और यदि आवश्यक हो तो एक अद्वितीय पैरामीटर सेपरेटर जोड़ें। व्यक्तिगत पैरामीटर प्राप्त करने के लिए प्रक्रिया के अंदर सबस्ट्रिंग, CHARINDEX इत्यादि का उपयोग करें।

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