sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Alternativ till IN-operator med variabel och mellan

Du kan deklarera en tabellvariabel (eller parameter om den är en del av en procedur eller funktion) och använda den för not in del:

DECLARE @NotIn table (
    NotInValues int
)

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

och använd den i din kod så här:

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    

Obs #1: för ett stort antal värden kommer not exists förmodligen att fungera bättre än inte i

Obs #2: Om det är en del av en lagrad procedur måste du skapa en användardefinierad tabelltyp och använda den för att deklarera tabellvärderad parameter. Parametrar med tabellvärde är också skrivskyddade, så om du utför DML-satser (infoga/uppdatera/ta bort) på dem uppstår ett fel.

Så här skapar du utt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

För att deklarera det i parameterlistan för lagrad procedur:

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



  1. Använd JDBC/Mysql Connector i en intelligent idé

  2. Hur kan jag lösa [ERROR] InnoDB:Operativsystemfel nummer 87 i en filoperation på mysql?

  3. Alfanumerisk sortering

  4. beteende av inre join inuti existerar sql