Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Thay thế cho toán tử IN với biến và giữa

Bạn có thể khai báo một biến bảng (hoặc tham số nếu nó là một phần của thủ tục hoặc hàm) và sử dụng nó cho not in phần:

DECLARE @NotIn table (
    NotInValues int
)

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

và sử dụng nó trong mã của bạn như sau:

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    

Lưu ý số 1: đối với một số lượng lớn các giá trị, không tồn tại có thể sẽ hoạt động tốt hơn sau đó không phải trong

Lưu ý # 2: Nếu đó là một phần của thủ tục được lưu trữ, bạn sẽ cần tạo một kiểu bảng do người dùng xác định và sử dụng nó để khai báo tham số có giá trị của bảng. Ngoài ra, các tham số có giá trị trong bảng chỉ được đọc, vì vậy việc thực hiện các câu lệnh DML (chèn / cập nhật / xóa) trên chúng sẽ gây ra lỗi.

Để tạo udt:

CREATE TYPE IntegerList As Table
(
    IntValue int
)

Để khai báo nó trong danh sách tham số thủ tục được lưu trữ:

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. Tạo mã sql theo lập trình

  2. Cảnh báo SQL khi thủ tục được lưu trữ thực thi quá lâu

  3. pyodbc trên google colab

  4. Khôi phục dữ liệu đã cập nhật - SQL Server 2005

  5. Các mục nhập trùng lặp có dấu thời gian khác nhau