Ho da poco iniziato a studiare le stored procedure e volevo implementarne alcune in un programma
Praticamente in una form ho una griglia dove l'utente visualizza tutti i record di una tabella dopo aver impostato dei filtri su alcuni campi: questi campi sono 4 date (che da ora chiamerò data1, data2, data3 e data4) e nei filtri si può impostare di selezionare i record che hanno datax compreso tra 2 date o maggiore/minore di una data (volendo si può anche non impostare nessun filtro)
Quindi io ho realizzato una stored procedure con 8 parametri, 2 per ogni data (il valore iniziale e quello finale), che di default (in caso che non vengano passati) assegno il valore minimo o massimo del campo DateTime. Poi nel where metto le seguenti condizioni:
Data1 >= @Data1Ini AND Data1 <= @Data1Fine (così per ogni data)
E fin qui tutto bene, la query funziona, ma non è perfetta. Il problema si verifica quando l'utente non imposta alcun filtro per una qualsiasi delle 4 date. Teoricamente infatti non impostando nessun filtro su, ad esempio, data1, vorrei che la la procedura mi selezionasse tutti i record che hanno data1 uguale a qualsiasi valore, NULL compreso. Con la mia stored procedure invece ritornano tutti i record che hanno data1 diverso da null.
Come posso fare per risolvere questo problema? Esiste un modo per mettere le condizioni solo se i parametri sono diversi da un certo valore?
Accetto consigli di qualsiasi tipo, come ho già detto sono alle prime armi con le stored procedure
Oggi stavo pensando di cambiare in questo modo le condizioni:
((Data1 >= @Data1Ini AND Data1 <= @Data1Fine) OR Data1 IS NULL)
In questo modo però ho il problema opposto, cioè che se l'utente mette un filtro, vengono selezionate anche i record con Data1 = NULL
Ma magari pensavo di rimuoverli successivamente mettendo la select in una tabella temporanea (creata nella stored procedure) e applicando poi una delete, solo che ho riscontrato dei problemi (un errore) nel caricamento della tabella (non nella creazione) che adesso non ricordo (domani cercherò di essere più preciso)