sql >> Database >  >> RDS >> Sqlserver

WHERE IN (array van ID's)

Dat kun je (helaas) niet. Een Sql-parameter kan maar een enkele waarde zijn, dus u moet het volgende doen:

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

Wat natuurlijk vereist dat je weet hoeveel gebouw-ID's er zijn, of om de query dynamisch te construeren.

Als tijdelijke oplossing* heb ik het volgende gedaan:

WHERE buildingID IN (@buildingID)

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

die de tekst van de verklaring zal vervangen door de cijfers, eindigend als zoiets als:

WHERE buildingID IN (1,2,3,4)
  • Merk op dat dit in de buurt komt van een Sql-injectiekwetsbaarheid, maar aangezien het een int-array is, is het veilig. Willekeurige strings zijn niet veilig, maar er is geen manier om Sql-instructies in een geheel getal (of datetime, boolean, enz.) in te sluiten.


  1. Hoe beïnvloeden IMMUTABLE, STABLE en VOLATILE trefwoorden het gedrag van de functie?

  2. PostgreSQL-query om resultaten te retourneren als een door komma's gescheiden lijst

  3. Hoe u de nieuwste functies in Office 365 krijgt

  4. Uw PostgreSQL-back-ups valideren op Docker