Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Alternativa all'operatore IN con variabile e tra

Puoi dichiarare una variabile di tabella (o un parametro se fa parte di una procedura o funzione) e usarla per not in parte:

DECLARE @NotIn table (
    NotInValues int
)

INSERT INTO @NotIn Values
('00009000'),
('00009900'),
('00009906')

e usalo nel tuo codice in questo modo:

where [Location Code] between '0000' and '0040' 
and [Item No_] not IN (select NotInValues from @NotIn) 
and Gutschrift = '1' 
and [Document Date] between @Start and @Ende    

Nota n. 1: per un numero elevato di valori, non esiste probabilmente funzionerà meglio di non in

Nota n. 2: Se fa parte di una procedura memorizzata, sarà necessario creare un tipo di tabella definito dall'utente e utilizzarlo per dichiarare il parametro con valore di tabella. Inoltre, i parametri con valori di tabella sono di sola lettura, quindi l'esecuzione di istruzioni DML (inserisci/aggiorna/elimina) su di essi genererà un errore.

Per creare l'udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

Per dichiararlo nell'elenco dei parametri della procedura memorizzata:

CREATE PROCEDURE procedureName
(
   @IntList dbo.IntegerList READONLY
   -- Note that the readonly must be a part of the parameter declaration.
)