Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

WHERE IN (tableau d'ID)

Vous ne pouvez pas (malheureusement) le faire. Un paramètre Sql ne peut être qu'une seule valeur, vous devez donc :

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

Ce qui, bien sûr, nécessite que vous connaissiez le nombre d'identifiants de bâtiment ou que vous construisiez dynamiquement la requête.

Comme solution de contournement*, j'ai fait ce qui suit :

WHERE buildingID IN (@buildingID)

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

qui remplacera le texte de la déclaration par les chiffres, se terminant par quelque chose comme :

WHERE buildingID IN (1,2,3,4)
  • Notez que cela se rapproche d'une vulnérabilité d'injection SQL, mais comme il s'agit d'un tableau int, c'est sûr. Les chaînes arbitraires ne sont pas sûr, mais il n'y a aucun moyen d'intégrer des instructions Sql dans un entier (ou datetime, booléen, etc.).