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

WHERE IN (mảng ID)

Bạn không thể (không may) làm điều đó. Tham số Sql chỉ có thể là một giá trị duy nhất, vì vậy bạn phải làm:

WHERE buildingID IN (@buildingID1, @buildingID2, @buildingID3...)

Tất nhiên, điều này yêu cầu bạn biết có bao nhiêu id xây dựng hoặc để tạo động truy vấn.

Để giải quyết vấn đề *, tôi đã thực hiện như sau:

WHERE buildingID IN (@buildingID)

command.CommandText = command.CommandText.Replace(
  "@buildingID", 
  string.Join(buildingIDs.Select(b => b.ToString()), ",")
);

sẽ thay thế văn bản của câu lệnh bằng các số, kết thúc như sau:

WHERE buildingID IN (1,2,3,4)
  • Lưu ý rằng điều này đang tiến gần đến lỗ hổng Sql injection, nhưng vì nó là một mảng int an toàn. Các chuỗi tùy ý là không an toàn, nhưng không có cách nào để nhúng các câu lệnh Sql vào một số nguyên (hoặc datetime, boolean, v.v.).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách ngăn cập nhật bảng, trừ một trường hợp ngoại lệ

  2. Sử dụng DATABASEPROPERTYEX () để trả lại cài đặt cơ sở dữ liệu trong SQL Server

  3. Ví dụ về sys.dm_sql_referenced_entities () của SQL Server’s sys.dm_sql_referenced_entities () Trả lại một thực thể tham chiếu đến máy chủ được liên kết

  4. Nhận danh sách các ngày giữa hai ngày bằng cách sử dụng một hàm

  5. Làm thế nào để gửi email từ SQL Server?