Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Алтернатива на IN оператор с променлива и между

Можете да декларирате променлива на таблица (или параметър, ако е част от процедура или функция) и да я използвате за not in част:

DECLARE @NotIn table (
    NotInValues int
)

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

и го използвайте в кода си по този начин:

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    

Бележка №1: за голям брой стойности not exists вероятно ще се представи по-добре, отколкото не in

Забележка №2: Ако е част от съхранена процедура, ще трябва да създадете дефиниран от потребителя тип таблица и да го използвате, за да декларирате параметъра със стойност на таблицата. Освен това параметрите с таблични стойности са само за четене, така че изпълнението на DML изрази (вмъкване/актуализиране/изтриване) върху тях ще доведе до грешка.

За да създадете udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

За да го декларирате в списъка с параметри на запомнената процедура:

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. Автоматизирани архиви на SQL Server

  2. SQL:търсене на низ във всяка колона с varchar в база данни

  3. Има ли начин да посочите множество схеми на SQL Server 2008 за командата 'generateChangeLog' на Liquibase?

  4. Как мога да разбера дали SQLexception е изхвърлен поради нарушение на външния ключ?

  5. Не може да се прехвърли TEXT към XML в SQL Server