sql >> Base de Datos >  >> RDS >> Sqlserver

DÓNDE EN (matriz de ID)

No puedes (desafortunadamente) hacer eso. Un parámetro Sql solo puede ser un valor único, por lo que tendría que hacer:

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

Lo que, por supuesto, requiere que sepas cuántos ID de edificio hay o que construyas la consulta dinámicamente.

Como solución temporal*, he hecho lo siguiente:

WHERE buildingID IN (@buildingID)

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

que reemplazará el texto de la declaración con los números, terminando así:

WHERE buildingID IN (1,2,3,4)
  • Tenga en cuenta que esto se está acercando a una vulnerabilidad de inyección Sql, pero dado que es una matriz int es segura. Las cadenas arbitrarias son no seguro, pero no hay forma de incrustar declaraciones Sql en un número entero (o fecha y hora, booleano, etc.).