Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Alternatif untuk operator IN dengan variabel dan antara

Anda dapat mendeklarasikan variabel tabel (atau parameter jika itu adalah bagian dari prosedur atau fungsi) dan menggunakannya untuk not in bagian:

DECLARE @NotIn table (
    NotInValues int
)

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

dan gunakan dalam kode Anda seperti ini:

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    

Catatan #1: untuk sejumlah besar nilai, tidak ada mungkin akan berkinerja lebih baik daripada tidak di

Catatan #2: Jika itu adalah bagian dari prosedur tersimpan, Anda perlu membuat tipe tabel yang ditentukan pengguna, dan menggunakannya untuk mendeklarasikan parameter nilai tabel. Selain itu, parameter bernilai tabel bersifat hanya-baca, sehingga menjalankan pernyataan DML (masukkan/perbarui/hapus) pada parameter tersebut akan menimbulkan kesalahan.

Untuk membuat udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

Untuk mendeklarasikannya dalam daftar parameter prosedur tersimpan:

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. Bagaimana Fungsi SPACE() Bekerja di SQL Server (T-SQL)

  2. Prosedur Tersimpan mengembalikan beberapa set hasil

  3. Cara menghapus baris duplikat sepenuhnya

  4. Tidak dapat meneruskan parameter input ke prosedur tersimpan

  5. kesalahan mengonversi varchar ke float