sql >> Database teknologi >  >> RDS >> Sqlserver

WHERE IN (matrix af ID'er)

Det kan man (desværre) ikke. En SQL-parameter kan kun være en enkelt værdi, så du skal gøre:

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

Hvilket selvfølgelig kræver, at du ved, hvor mange bygnings-id'er der er, eller at du dynamisk konstruerer forespørgslen.

Som en løsning* har jeg gjort følgende:

WHERE buildingID IN (@buildingID)

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

som vil erstatte teksten i udsagnet med tallene, og ender som noget i retning af:

WHERE buildingID IN (1,2,3,4)
  • Bemærk, at dette nærmer sig en SQL-injektionssårbarhed, men da det er et int-array, er det sikkert. Vilkårlige strenge er ikke sikkert, men der er ingen måde at indlejre Sql-sætninger i et heltal (eller datetime, boolean osv.).


  1. SQL SELECT-sætning

  2. Sådan konverteres MySQL-tid

  3. Cloud Disaster Recovery til MariaDB og MySQL

  4. En sammenligning mellem MySQL Clone Plugin og Xtrabackup