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

SQL Alternativ til IN-operator med variabel og mellem

Du kan erklære en tabelvariabel (eller parameter, hvis den er en del af en procedure eller funktion) og bruge den til not in del:

DECLARE @NotIn table (
    NotInValues int
)

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

og brug det i din kode sådan her:

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    

Bemærk #1: for et stort antal værdier, vil ikke eksisterer sandsynligvis fungere bedre end ikke i

Bemærk #2: Hvis det er en del af en lagret procedure, bliver du nødt til at oprette en brugerdefineret tabeltype og bruge den til at erklære den tabelværdierede parameter. Parametre med tabelværdi er også skrivebeskyttet, så udførelse af DML-sætninger (insert/update/delete) på dem vil give en fejl.

Sådan oprettes udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

For at erklære det i listen over lagrede procedureparametre:

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



  1. Fjernelse af gentagne duplikerede tegn

  2. Rediger valgte rækker manuelt i SQL Server

  3. Hvordan kan jeg lave serversidepaginering af resultater i SQL Server 2000?

  4. PostgreSQL delvist unikt indeks og upsert