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

DI MANA DI (array ID)

Anda tidak bisa (sayangnya) melakukan itu. Parameter Sql hanya dapat berupa nilai tunggal, jadi Anda harus melakukan:

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

Yang, tentu saja, mengharuskan Anda mengetahui berapa banyak ID bangunan yang ada, atau untuk membuat kueri secara dinamis.

Sebagai solusinya*, saya telah melakukan hal berikut:

WHERE buildingID IN (@buildingID)

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

yang akan menggantikan teks pernyataan dengan angka, berakhir seperti:

WHERE buildingID IN (1,2,3,4)
  • Perhatikan bahwa ini mendekati kerentanan injeksi Sql, tetapi karena ini adalah int array yang aman. String arbitrer bukan aman, tetapi tidak ada cara untuk menyematkan pernyataan Sql dalam bilangan bulat (atau datetime, boolean, dll).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MSDTC di server 'server tidak tersedia'

  2. Bagaimana cara menggunakan ROW_NUMBER()?

  3. Tetapkan Profil Publik Default untuk Database Mail (SSMS)

  4. Bagaimana saya harus meneruskan nama tabel ke proc yang disimpan?

  5. Mengotomatiskan Defragmentasi Indeks di Database MS SQL Server