2010-10-05 17 views
19

Quelqu'un peut-il trouver mon erreur dans cette requête? J'utilise SQL Server 2000 et je veux mettre à jour toutes les entrées dans la table CostEntry à la valeur correspondante dans la table ActiveCostDetails. La clause where fonctionne avec une instruction select.Syntaxe de requête de mise à jour SQL avec jointure interne

UPDATE CostEntry CE 
INNER JOIN ActiveCostDetails As AD ON CostEntry.lUniqueID = ActiveCostDetails.UniqueID 
     SET CostEntry.sJobNumber = ActiveCostDetails.JobNumber 
    WHERE CostEntry.SEmployeeCode = '002' 
     AND SubString(CostCentre, 1, 1) = sDepartmentCode 
     AND substring(CostCentre, 3, 1) = sCategoryCode 
     AND substring(CostCentre, 5, 2) = sOperationCode 
+0

@OMG Ponies- Merci pour la recherche, mais cette requête a le même effet que l'original (ne fonctionne pas en raison d'une erreur de syntaxe). Je crois que c'est parce que SQL Server ignore les espaces et les retours chariot dans une requête. – MAW74656

+0

Je viens de reformater ce que vous avez posté - plus facile à lire, plus facile à aider –

+0

Ok poneys, je comprends. Je travaillais sur un exemple, en ligne ... http://www.tek-tips.com/faqs.cfm?fid=1958 Mais votre chemin est meilleur. – MAW74656

Répondre

40

Les besoins SET à venir avant la partie FROM\JOIN\WHERE de la requête.

UPDATE CE 
SET sJobNumber = AD.JobNumber 
FROM CostEntry CE 
    INNER JOIN ActiveCostDetails As AD 
     ON CE.lUniqueID = AD.UniqueID 
WHERE CE.SEmployeeCode = '002' 
    AND SubString(CostCentre, 1, 1) = sDepartmentCode 
    AND substring(CostCentre, 3, 1) = sCategoryCode 
    AND substring(CostCentre, 5, 2) = sOperationCode 
+0

+1: [Documentation de mise à jour SS2000] (http://msdn.microsoft.com/en-us/library/aa260662%28SQL.80%29.aspx) –

+0

@Joe Stefanelli - Fermer, mais l'analyseur n'aime pas les noms lorsqu'un alias est défini. Cela a fonctionné – MAW74656

+0

: MISE A JOUR CE SET CE.sJobNumber = AD.JobNumber DE CE CostEntry INNER JOIN ActiveCostDetails Comme AD SUR CE.lUniqueID = AD.UniqueID OÙ CE.SEmployeeCode = '002' ET SubString (CostCentre, 1 , 1) = sDepartmentCode ET sous-chaîne (CostCentre, 3, 1) = sCategoryCode ET sous-chaîne (CostCentre, 5, 2) = sOperationCode – MAW74656

1

Cela devrait fonctionner

UPDATE CE 
SET CostEntry.sJobNumber = ActiveCostDetails.JobNumber 
FROM CostEntry CE 
INNER JOIN ActiveCostDetails As AD ON CostEntry.lUniqueID = ActiveCostDetails.UniqueID  
    WHERE CostEntry.SEmployeeCode = '002' 
     AND SubString(CostCentre, 1, 1) = sDepartmentCode 
     AND substring(CostCentre, 3, 1) = sCategoryCode 
     AND substring(CostCentre, 5, 2) = sOperationCode 
+2

Wow, vieille question .... assez embarrassant que je ne connaissais pas à l'époque ... – MAW74656