Ho una stored procedure a cui dovrei mettere una clausola in where opzionale quando gli viene fornito un parametro che però è opzionale. Il campo su cui il parametro lavora (e quindi anche il parametro) è di tipo date. Ho risolto così ma vorrei conferma di aver fatto nel modo giusto:
quando viene fornito il parametro la select deve filtrare i risultati dove data = yyyymmdd, quando non viene fornito la query non deve filtrare per data.
Allora ho pensato di mettere due parametri con un valore di default
@datafrom as date ='20000101'
@datato as date =''
seguito dall'istruzione
if @datato = Cast('' as date)
set @datato = dateadd(day,1,GETDATE())

La query in WHERE riporta ... tabella.campo >= @datafrom AND tabella.campo < @datato

In questo modo quando NON voglio filtrare per data e non gli passo alcun parametro la query sounds like:
WHERE .... tabella.campo >= '20000101' AND tabella.campo < '-datadidomani-'

Quando invece voglio filtrare i risultati su una singola data forzo i parametri ad assumere due valori... ad esempio se voglio filtrare i risultati relativi al 15/08/2012 imposto
@datafrom = '20120815'
@datato = '20120816'
e la query sounds like:
WHERE .... tabella.campo >= '20120815' AND tabella.campo < '20120816'

....

per funzionare funziona, ma avrò fatto bene?