2010-03-21 8 views

Antwort

6

Sie die Standardwerte für die Parameter bei der SP einstellen Ebene, so dass die Parameter optional werden.

z.B.

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 

Dann können Sie die optionalen Parameter Ihrer Wahl hinzufügen.

12

Sie erklären das Verfahren mit Standardparametern und Sie rufen Sie es mit dem Namen Parameter anstelle von Positionsparameter:

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

aufzurufen es von T-SQL:

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

Um es von C# aufrufen :

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

Sie können XML-Typen verwenden. Hier ist ein Beispielverfahren:

 
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

Ich denke, das ist Overkill für das OP-Problem - aber denke, es kann wirklich nützlich sein für ein Problem, das ich derzeit habe! :) Vielen Dank! +1 –

1

Vorbereitung und exctracting Tags aus XML ist aperformance Killer. Die inkonsistenten Ausführungszeiten hängen davon ab, ob der Plan zwischengespeichert wird oder nicht.

Verwenden Sie stattdessen NVARCHAR (MAX) ist eine bessere Option. Bereiten Sie Ihre Parameter-Strings einfach mit dem Paar "@ name = Value" vor und fügen Sie bei Bedarf einen eindeutigen Parameter-Separator hinzu. Verwenden Sie innerhalb des Verfahrens SUBSTRING, CHARINDEX usw., um individuelle Parameter zu erhalten.

Verwandte Themen