Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281

    [SQL Server 2005] Mi serve aiuto per creare una stored procedure

    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)

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Temo che tu debba ricorrere all'uso di SQL dinamico, cioè creando lo statement SQL da eseguire sottoforma di stringa, includendo quindi le condizioni di filtro solo se gli specifici parametri sono stati specificati (non nulli) e, alla fine, eseguire quel comando.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    281
    Intendi dire che non devo usare una stored procedure ma creare la query direttamente dal mio programma in .net? (come tra l'altro già facevo prima )

    Cmq per ora sono riuscito a risolvere il problema dell'errore, era semplicemente che cercavo di assegnare un valore alla chiave della tabella temporanea che avevo dichiarato come identity
    In questo modo dopo aver eseguito la query non faccio altro che controllare se i parametri sono NULL (in realtà se i 2 parametri per ogni data sono diversi uno dal valore minimo e l'altro dal valore massimo), elimino dalla tabella temporanea tutti i record che hanno quella data = NULL
    E alla fine restituisco tutti i record rimasti nella tabella temporanea

    Solo che ora sto riscontrando spesso un errore di timeout quando richiamo la stored procedure dal programma (soprattutto se non gli passo alcun filtro). Non c'è un modo per aumentare il tempo di timeout di una query?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.