Supponiamo che ci sia una procedura memorizzata con 3 parametri. Fuori di tutte le possibilità, sto cercando di raggiungere questo obiettivo con una sola clausola di WHERE
senza ottenere fuori controllo con l'utilizzo di () AND() OR()
troppo ...Argomenti opzionali nella clausola WHERE
Esempio:
//Params
@CITY VARCHAR(100) = NULL,
@GENDER VARCHAR(100) = NULL,
@AGE VARCHAR(100) = NULL
Suppongo che si può fare usando IF BEGIN ... END
per ogni variabile se esiste, ma questo rende il codice molto più lungo di quanto desiderato ..
Questo metodo non funzionerà perché è troppo lungo (ci sono circa 10 campi diversi come questo, ma l'esempio è solo 3.) e non sono sicuro se persino tira direttamente su valori distintivi ...
SELECT NAME FROM TABLE
WHERE (
([email protected] AND [email protected] AND [email protected])
OR ([email protected] AND [email protected])
OR ([email protected] AND [email protected])
OR ([email protected] AND [email protected])
OR ([email protected])
OR ([email protected])
OR ([email protected])
)
Esiste un modo ancora più breve ed efficiente per farlo?
Se sì, è preferibile che il metodo sia compatibile anche con JOIN.
Side-nota: quando si definisce un 'VARCHAR()' - come parametro per un proc memorizzato o una variabile locale - dovrebbe ** sempre ** avere una ** lunghezza ** definita! Altrimenti potresti finire inavvertitamente con 'VARCHAR (1)' stringhe '... –
I campi facoltativi significano se non esiste il valore o' NULL', quindi non mostrarlo nella clausola Where, è possibile? –
Leggi questo: [Condizioni di ricerca dinamica in T-SQL] (http://sommarskog.se/dyn-search-2008.html) –