Ho una query simile in natura di seguito in una stored procedure che dispone di un singolo parametro:filtraggio condizionale aderire
SELECT
ID,
DepartmentID,
FileName
FROM
Document
-- conditional join from here
JOIN
AllowedDepartmentList ON DepartmentID = AllowedDepartmentList.ID
AND @IsAdmin = 'false'
Il parametro è @IsAdmin
con il bit di tipo di dati.
Le due tabelle con cui lavoro sono la tabella Document
(vedere la struttura nella query sopra) e la AllowedDepartmentList
che contiene una singola colonna int
.
Uso questa query per filtrare i risultati restituiti della tabella Document
con join. Non uso la clausola WHERE DepartmentID IN()
, perché la ListaDiDelegato può essere lunga fino a 600-700 elementi (troppa per IN()
da gestire con buone prestazioni in una tabella di record potenzialmente 1M) Quindi filtro usando un join, ma il filtro deve essere solo eseguire, se il parametro @IsAdmin è false
. Come le righe dopo il - join condizionale da qui il commento non era nemmeno lì.
Ho provato la query sopra ma non produce alcun record. Sospetto che sto usando il tipo sbagliato di join, ma sono bloccato.
Nota che il suggerimento di jhilden è più efficiente, dal momento che ti salverai da un join nelle situazioni in cui non è necessario. Tuttavia, comprendo la tua argomentazione su come mantenere una sola query. –
Grazie mille, questo sembra essere OK, devo provarlo. E sì, hai ragione, dobbiamo anche verificare se i join in più causano un sovraccarico tale che vale la pena duplicare il codice. – Daniel
Ho accettato la risposta poiché abbiamo implementato questa soluzione a scopo di test. Funziona come necessario e svolge il lavoro, ma le prestazioni devono essere misurate. Ci sono molte altre risposte che si adattano al conto, quindi grazie per tutti coloro che hanno avuto il tempo di giocare con il mio problema. – Daniel