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

WHERE IN (масив от идентификационни номера)

Не можете (за съжаление) да направите това. Sql параметърът може да бъде само една стойност, така че трябва да направите:

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

Което, разбира се, изисква да знаете колко идентификатори на сгради има или да конструирате динамично заявката.

Като заобиколно решение* направих следното:

WHERE buildingID IN (@buildingID)

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

което ще замени текста на изявлението с числата, завършвайки като нещо като:

WHERE buildingID IN (1,2,3,4)
  • Обърнете внимание, че това се доближава до уязвимост при инжектиране на Sql, но тъй като е int масив, е безопасно. Произволните низове не безопасно, но няма начин за вграждане на Sql изрази в цяло число (или дата, час, булева и т.н.).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намеря текущото ниво на транзакция?

  2. Достъпът е отказан при прикачване на база данни

  3. Търсете във всички таблици, всички колони за конкретна стойност SQL Server

  4. Весели туитове за живота на DBA

  5. Как да промените съпоставянето на база данни на SQL Server с помощта на T-SQL