2010-10-05 12 views
19

Czy ktoś może znaleźć mój błąd w tym zapytaniu? Używam programu SQL Server 2000 i chcę zaktualizować wszystkie wpisy w tabeli CostEntry do odpowiedniej wartości w tabeli ActiveCostDetails. Klauzula where działa z poleceniem select.Składnia zapytania SQL z wewnętrznym złączem

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- Dzięki za opiekę, ale ta kwerenda ma taki sam efekt jak oryginał (nie działa z powodu błędu składni). Wierzę, że dzieje się tak, ponieważ serwer SQL ignoruje spacje i zwraca karetki w zapytaniu. – MAW74656

+0

Właśnie przeformatowałem to, co napisaliście - łatwiejsze do odczytania, łatwiejsze do pomocy. –

+0

Kucyki, rozumiem. Pracowałem nad przykładem, online ... http://www.tek-tips.com/faqs.cfm?fid=1958 Ale twoja droga jest lepsza. – MAW74656

Odpowiedz

40

W SET potrzeby przyjść wcześniej części FROM\JOIN\WHERE zapytania.

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: [Dokumentacja aktualizacji SS2000] (http://msdn.microsoft.com/en-us/library/aa260662%28SQL.80%29.aspx) –

+0

@Joe Stefanelli - Zamknij, ale parser nie lubi nazwy, gdy ustawiony jest alias. – MAW74656

+0

ten pracował aktualizowania CE SET CE.sJobNumber = AD.JobNumber Z CostEntry CE WEWNĘTRZNY Dołącz ActiveCostDetails jak AD NA CE.lUniqueID = AD.UniqueID GDZIE CE.SEmployeeCode = '002' I SUBSTRING (CostCentre 1 , 1) = sDepartmentCode ORAZ podłańcuch (CostCentre, 3, 1) = sCategoryCode ORAZ podłańcuch (CostCentre, 5, 2) = sOperationCode – MAW74656

1

To powinno działać

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, stare pytanie ... dość zawstydzające, że nie wiedziałem o tym wtedy ... – MAW74656