sql >> Databasteknik >  >> RDS >> Sqlserver

WHERE IN (uppsättning av ID)

Det kan man (tyvärr) inte göra. En SQL-parameter kan bara vara ett enda värde, så du måste göra:

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

Vilket naturligtvis kräver att du vet hur många byggnads-ID det finns, eller att du dynamiskt konstruerar frågan.

Som en lösning* har jag gjort följande:

WHERE buildingID IN (@buildingID)

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

som kommer att ersätta texten i påståendet med siffrorna, vilket slutar som något i stil med:

WHERE buildingID IN (1,2,3,4)
  • Observera att detta närmar sig en SQL-injektionssårbarhet, men eftersom det är en int-array är det säkert. Godtyckliga strängar är inte säkert, men det finns inget sätt att bädda in Sql-satser i ett heltal (eller datetime, boolean, etc).


  1. Skillnad mellan DECIMAL och NUMERIC datatyp i PSQL

  2. Hur man designar ett geografiskt distribuerat MariaDB-kluster

  3. Felsökning av SQL Server CPU-prestandaproblem

  4. Reguljära uttryck hitta och ersätt i Postgres