La façon dont vous avez votre déclaration code maintenant fonctionnera (une fois que vous ajoutez la référence de colonne à la déclaration de cas, comme mentionné par d'autres messages), cependant, laisser le reste de votre syntaxe ne pas être commenté serait un mauvais service pour les autres dans votre situation.
Bien que vous ne deviez exécuter cette requête qu'une fois, moi et d'autres avons rencontré des situations similaires où Update
à plusieurs lignes dépend également des données à 3 ou 4 tables de notre source et doit être exécuté plusieurs fois (comme dans un rapport).
En regroupant vos sous choisit en une seule instruction select
et enregistrer les résultats de ce dans une table #Temp
ou une variable @Table
, il suffit de le faire référence une fois, puis sélectionnez le résultat de votre mise à jour.
Voici un échantillon en utilisant une variable @table:
declare @OilStatus table (oilDatasetStatusID int)
insert into @OilStatus
select odss.oildatasetstatusid
from OildataSetStatus odss
join oilDataSet ods on ods.OilDataSetID = odss.OilDataSetID
join SamplePoint sp on sp.SamplePointID = odss.SamplePointID
join CustomerSite cs on cs.CustomerSiteID = sp.CustomerSiteID
where cs.CustomerID = 2
update oildatasetstatus
set oildatasetstatusid =
case oildatasetstatusid
WHEN 5 THEN 16
WHEN 6 THEN 17
WHEN 7 THEN 18
WHEN 8 THEN 18
WHEN 9 THEN 18
WHEN 10 THEN 19
WHEN 11 THEN 20
end
where oildatasetlabstatusid in (select oilDatasetStatusID from @OilStatus)
Depuis que je n'ai pas votre schéma exact, il peut y avoir des erreurs en essayant de mettre en œuvre l'exemple ci-dessus, mais je pense que vous aurez l'idée.
De même, lorsque plusieurs tables sont utilisées dans une seule instruction, essayez de préfacer chaque nom de colonne avec un alias ou le nom complet de la table. Cela aide à garder le moteur SQL et les personnes lisant votre code de se perdre.