sql >> Base de Datos >  >> RDS >> Sqlserver

Alternativa SQL al operador IN con variable y entre

Puede declarar una variable de tabla (o un parámetro si es parte de un procedimiento o función) y usarla para el not in parte:

DECLARE @NotIn table (
    NotInValues int
)

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

y utilícelo en su código así:

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: para una gran cantidad de valores, no existe probablemente funcionará mejor que no en

Nota n.º 2: Si es parte de un procedimiento almacenado, deberá crear un tipo de tabla definido por el usuario y usarlo para declarar el parámetro con valor de tabla. Además, los parámetros con valores de tabla son de solo lectura, por lo que realizar declaraciones DML (insertar/actualizar/eliminar) en ellos generará un error.

Para crear la udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

Para declararlo en la lista de parámetros del procedimiento almacenado:

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