2010-10-05 2 views
19

Может ли кто-нибудь найти мою ошибку в этом запросе? Я использую SQL Server 2000, и я хочу обновить все записи таблицы CostEntry до соответствующего значения в таблице ActiveCostDetails. Предложение where работает с выражением select.Синтаксис запроса SQL-запроса с внутренним соединением

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- Спасибо за красивый, но этот запрос имеет тот же эффект, что и оригинал (не работает в связи с синтаксической ошибкой). Я считаю, это связано с тем, что SQL-сервер игнорирует пробелы и возвращает каретки в запросе. – MAW74656

+0

Я просто переформатировал то, что вы разместили, - легче читать, проще помочь –

+0

Хорошо, пони, я понимаю. Я работал с примера, в Интернете ... http://www.tek-tips.com/faqs.cfm?fid=1958 Но ваш путь лучше. – MAW74656

ответ

40

В SET потребности прийти до FROM\JOIN\WHERE части запроса.

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: [Документация по обновлению SS2000] (http://msdn.microsoft.com/en-us/library/aa260662%28SQL.80%29.aspx) –

+0

@ Джо Стефанелли - Закрыть, но парсер не нравится имена, когда установлен псевдоним. – MAW74656

+0

Это работало: ОБНОВЛЕНИЕ CE SET CE.sJobNumber = AD.JobNumber ОТ CostEntry CE INNER JOIN ActiveCostDetails As AD = О CE.lUniqueID AD.UniqueID ГДЕ CE.SEmployeeCode = '002' И подстроку (CostCentre, 1 , 1) = sDepartmentCode И подстрока (CostCentre, 3, 1) = sCategoryCode И подстрока (CostCentre, 5, 2) = sOperationCode – MAW74656

1

Это должно работать

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

Ничего себе, старый вопрос .... довольно неловко, что я тогда этого не знал ... – MAW74656