Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

ONDE EM (matriz de IDs)


Você não pode (infelizmente) fazer isso. Um parâmetro Sql só pode ser um único valor, então você teria que fazer:
WHERE buildingID IN (@buildingID1, @buildingID2, @buildingID3...)

O que, é claro, requer que você saiba quantos IDs de construção existem ou que construa dinamicamente a consulta.

Como solução alternativa*, fiz o seguinte:
WHERE buildingID IN (@buildingID)

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

que substituirá o texto da instrução pelos números, terminando como algo como:
WHERE buildingID IN (1,2,3,4)
  • Observe que isso está se aproximando de uma vulnerabilidade de injeção de SQL, mas como é um array int, é seguro. Strings arbitrárias não seguro, mas não há como incorporar instruções Sql em um inteiro (ou datetime, boolean, etc).