Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

WO IN (Array von IDs)

Das kann man (leider) nicht. Ein SQL-Parameter kann nur ein einzelner Wert sein, also müssten Sie Folgendes tun:

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

Dazu müssen Sie natürlich wissen, wie viele Gebäude-IDs vorhanden sind, oder die Abfrage dynamisch erstellen.

Als Problemumgehung* habe ich Folgendes getan:

WHERE buildingID IN (@buildingID)

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

Dadurch wird der Text der Anweisung durch die Zahlen ersetzt, was in etwa so endet:

WHERE buildingID IN (1,2,3,4)
  • Beachten Sie, dass dies einer Sql-Injection-Schwachstelle nahe kommt, aber da es sich um ein int-Array handelt, ist es sicher. Beliebige Zeichenfolgen sind nicht sicher, aber es gibt keine Möglichkeit, SQL-Anweisungen in eine ganze Zahl (oder datetime, boolean usw.) einzubetten.