sql >> Databáze >  >> RDS >> Sqlserver

SQL Alternativa k operátoru IN s proměnnou a mezi

Můžete deklarovat proměnnou tabulky (nebo parametr, pokud je součástí procedury nebo funkce) a použít ji pro not in část:

DECLARE @NotIn table (
    NotInValues int
)

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

a použijte jej ve svém kódu takto:

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    

Poznámka č. 1: pro velký počet hodnot, not exists bude pravděpodobně fungovat lépe než not in

Poznámka č. 2: Pokud je součástí uložené procedury, budete muset vytvořit uživatelsky definovaný typ tabulky a použít jej k deklaraci parametru s hodnotou tabulky. Parametry s hodnotou tabulky jsou také pouze pro čtení, takže provádění příkazů DML (insert/update/delete) na nich způsobí chybu.

Chcete-li vytvořit udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

Chcete-li jej deklarovat v seznamu parametrů uložené procedury:

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



  1. Jak mohu urychlit operace aktualizace/náhrady v PostgreSQL?

  2. Přidejte sloupec do tabulky s výchozí hodnotou rovnou hodnotě existujícího sloupce

  3. PHP MySQL Delete funkce ve smyčce while

  4. Přepis adresy URL pomocí .htaccess vytvoří duplicitní položky mysql