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

Mettre à jour l'instruction pour plusieurs identifiants

C'est parce que vous essayez de définir column3 à un résultat renvoyé, et SQL s'attend à ce qu'il s'agisse d'une seule valeur (scalaire). Le moteur SQL devient confus lorsque vous lui transmettez plus d'une valeur de retour (laquelle doit-il utiliser ?... il ne suppose pas qu'il parcourt les résultats). Ainsi, si vous souhaitez mettre à jour un ensemble de résultats complet, vous devez créer une sous-table à partir de votre requête et vous joindre à celle-ci. Votre requête devrait ressembler davantage à ceci

UPDATE Table3
SET Column3 = subtable.value
FROM Table3 
    JOIN (
        select t2.column3+t1.column3 as value, t1.id
        from table2 t2 with (nolock) join table1 t1
        on table2.id=t1.id
        where table2.id IN (100,101)
    ) AS subtable
    ON subtable.id = Table3.id
WHERE table3.id IN (100, 101)

Sous cette hypothèse que table3.id correspond aux autres identifiants, vous n'avez pas non plus vraiment besoin du where table2.id IN ...