Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Alternatywa dla operatora IN ze zmienną i pomiędzy

Możesz zadeklarować zmienną tabeli (lub parametr, jeśli jest częścią procedury lub funkcji) i użyć jej dla not in część:

DECLARE @NotIn table (
    NotInValues int
)

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

i użyj go w swoim kodzie w ten sposób:

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    

Uwaga nr 1: dla dużej liczby wartości nie istnieje prawdopodobnie będzie działać lepiej niż nie w

Uwaga #2: Jeśli jest to część procedury składowanej, musisz utworzyć typ tabeli zdefiniowany przez użytkownika i użyć go do zadeklarowania parametru o wartości tabeli. Ponadto parametry o wartościach w tabeli są tylko do odczytu, więc wykonanie na nich instrukcji DML (wstaw/aktualizuj/usuń) spowoduje zgłoszenie błędu.

Aby utworzyć udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

Aby zadeklarować to na liście parametrów procedury składowanej:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generuj **nagie** instrukcje CREATE TABLE i CREATE PROC w SQL Server

  2. „Zapytanie niedozwolone w Waitfor” Błąd 101 w SQL Server

  3. Używając GETDATE() w wielu miejscach, czy lepiej jest używać zmiennej?

  4. Porównaj ciągi rozdzielane przecinkami w SQL

  5. Czy MS SQL Server między obejmuje granice zakresu?