gian...@gmail.com ha spiegato il 14/02/2012 :
> Ciao Alberto,
>
> ma usando coalesce come mostri tu non ne soffre l'efficienza della query?
Beh, diciamo che è comunque infinitamente meglio di una costruzione con
operatori logici e dei check IS NULL sui parametri, quelle cose tipo
WHERE
(@PARM1 IS NULL OR CAMPO1=@PARM1)
AND
(@PARM2 IS NULL OR CAMPO2=@PARM2)
AND
(@PARM3 IS NULL OR CAMPO3=@PARM3)
che oltretutto quel = su una cosa che può essere NULL mi mette i
brividi.
>
> Ipotizzando di dover considerare solo @PARAM1,
> non c'è differenza fra queste due query?
>
> Query A:
>
> SELECT <COLONNE> FROM TABELLA
> WHERE
> CAMPO1 = COALESCE(@PARM1, CAMPO1)
> AND
> CAMPO2 = COALESCE(@PARM2, CAMPO2)
> AND
> CAMPO3 = COALESCE(@PARM3, CAMPO3)
>
> Query B:
>
> SELECT <COLONNE> FROM TABELLA
> WHERE CAMPO1 = @PARM1
C'è sicuramente molta differenza.
Ma se hai n colonne che puoi voler testare, le possibilità sono solo 3:
Col coalesce
Con le strutture logiche che citavo sopra
Con una batteria di IF che fanno eseguire una cosa o l'altra (che però
devi farlo per tutte le combinazioni possibili).
Secondo me, più semplice, leggibile, manutenibile ed efficiente del
Coalesce, per un caso come questo, c'è poco.
Alberto