Hai due modi di procedere. Il primo è più lineare ovvero:
- inserisci le condizioni nella query sql solo dove necessario, come stai facendo adesso con gli IF
- definisci tutti i parametri nella stringa di definizione (anche se non saranno usati)
- passi i valori di tutti i parametri alla sp_executesql
Qui un esempio di definizione di un parametro che non viene usato:
DECLARE @IntVariable INT;
DECLARE @SQLString NVARCHAR(500);
DECLARE @ParmDefinition NVARCHAR(500);
/* Build the SQL string one time. */
SET @SQLString =
N'SELECT * FROM AdventureWorks.Sales.Store WHERE SalesPersonID = @SalesID';
/* Specify the parameter format one time. */
SET @ParmDefinition = N'@SalesID int, @ParametroProva int';
/* Execute the string with the first parameter value. */
SET @IntVariable = 275;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable,@ParametroProva = NULL;
/* Execute the same string with the second parameter value. */
SET @IntVariable = 276;
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@SalesID = @IntVariable,@ParametroProva = NULL;
Il secondo modo di procedere consiste nel definire parametri e stringa sql dentro all'if (quindi i parametri definiti saranno solo quelli usati) e poi usare le condizioni sull'if anche per richiamare la sp_executesql, quindi definire tante chiamate quante sono gli if. Questo secondo caso però è un po' meno leggibile.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko