2010-03-21 30 views

Respuesta

6

Puede establecer los valores predeterminados para los parámetros en el SP nivel para que los parámetros se vuelvan opcionales.

p. Ej.

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 

A continuación, puede rellenar los parámetros opcionales en su elección.

12

se declara el procedimiento con los parámetros por defecto y se lo debe invocar con parámetros con nombre en lugar de parámetros posicionales:

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

para invocarlo de T-SQL:

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

para invocarlo desde C# :

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

puede utilizar tipos XML. Aquí hay un procedimiento de muestra:

 
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

Creo que esto es excesivo para el problema de los PO, pero creo que puede ser realmente útil para un problema que tengo actualmente. :) ¡Gracias! +1 –

1

La preparación y extracción de etiquetas de XML es una de las causas más importantes. Los tiempos de ejecución inconsistentes dependen de si el plan está en caché o no.

El uso de NVARCHAR (MAX) en cambio es una mejor opción. Simplemente prepare las cadenas de parámetros con el par "@ name = Value" y añada un separador de parámetros único si es necesario. Dentro del procedimiento use SUBSTRING, CHARINDEX, etc. para obtener parámetros individuales.

Cuestiones relacionadas