sql >> Database >  >> RDS >> Sqlserver

SQL Alternatief voor IN-operator met variabele en tussen

U kunt een tabelvariabele declareren (of parameter als deze deel uitmaakt van een procedure of functie) en deze gebruiken voor de not in deel:

DECLARE @NotIn table (
    NotInValues int
)

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

en gebruik het als volgt in je code:

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    

Opmerking #1: voor een groot aantal waarden zal niet bestaan ​​waarschijnlijk beter presteren dan niet in

Opmerking #2: Als het deel uitmaakt van een opgeslagen procedure, moet u een door de gebruiker gedefinieerd tabeltype maken en dit gebruiken om de tabelwaardeparameter te declareren. Parameters met tabelwaarde zijn ook alleen-lezen, dus het uitvoeren van DML-instructies (insert/update/delete) daarop zal een fout opleveren.

Om de udt te maken:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

Om het te declareren in de lijst met opgeslagen procedureparameters:

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



  1. PHP PDO werkt de tabel niet bij en produceert geen fouten

  2. Json-gecodeerde gegevens invoegen in mysql

  3. Hoe maak je een database van shell-opdracht?

  4. db-veld (GROUP_CONCAT) als array