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

WHERE IN (matrice di ID)

Non puoi (purtroppo) farlo. Un parametro Sql può essere solo un singolo valore, quindi dovresti fare:

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

Il che, ovviamente, richiede di sapere quanti ID edificio ci sono o di costruire dinamicamente la query.

Come soluzione alternativa*, ho eseguito quanto segue:

WHERE buildingID IN (@buildingID)

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

che sostituirà il testo della dichiarazione con i numeri, finendo come qualcosa del tipo:

WHERE buildingID IN (1,2,3,4)
  • Nota che questo si sta avvicinando a una vulnerabilità di iniezione Sql, ma poiché si tratta di un array int è sicuro. Le stringhe arbitrarie non sicuro, ma non c'è modo di incorporare istruzioni Sql in un numero intero (o datetime, booleano, ecc.).