2015-10-30 5 views
-1

Я использую это в операторе слияния, но теперь получаю ошибку Неверное имя объекта «Источник».Недопустимое имя объекта «Источник» при использовании слияния

Я не получаю эту ошибку ни в одном из других моих утверждений о слиянии. Источник ниже. Я анонимный до некоторой степени так, пожалуйста, дайте мне знать, если это не ясно

MERGE dbo.Destination WITH (HOLDLOCK) AS Target 
USING 
(
SELECT DISTINCT id, col3, 
CAST(LEFT(DATEADD(m,months,CONVERT(date,CONCAT(origination,'/01'))),7) as varchar(20)) as CalendarMonth, 
col1, col2,col4 FROM dbo.Staging 
) AS Source 
ON (Target.ID=Source.id 
AND Target.Month=Source.col3) 
    WHEN MATCHED THEN 
     UPDATE SET 
     Target.CalendarMonth=Source.CalendarMonth, 
     Target.colF= (SELECT CASE WHEN col1>0 THEN 1 END AS colF FROM Source), 
     Target.colD=(SELECT CASE WHEN col4>0 THEN 1 END AS colD 
            FROM Source), 
     Target.colC=(SELECT CASE WHEN col1=0 AND col2=0 
            THEN 1 END AS colC FROM Source), 
     Target.colB(SELECT CASE WHEN col1>0 AND col2 
            THEN 1 END AS colB FROM Source), 
     Target.colG=(SELECT CASE WHEN col1>0 THEN col1 END AS colG FROM Source), 
     Target.colE=(SELECT CASE WHEN col4>0 THEN col3 END 
            AS colE FROM Source), 
     Target.PaidMonth=(SELECT CASE WHEN col1=0 AND col2=0 
            THEN col3 END AS PaidMonth 
            FROM Source), 
     WHEN NOT MATCHED BY TARGET THEN 
     INSERT 
     (Destination Table columns 
     ) 
     VALUES 
     ( Source values including derived values from above); 

END 

Заранее спасибо за помощь!

UPDATE:

рекомендация CD @ Сэм помог, где я заменил оператор выбора в полученных колонках с случай, когда COL4> 0 THEN col3 END и так далее. Спасибо всем за вашу помощь!

+0

Является ли это пример скопировать/вставить? Это не полное утверждение. – CDC

+0

Нет, я изменил имена переменных из моего фактического кода. Я, вероятно, немного ленился с КОГДА НЕ СКАЗАЛ ПО ЦЕЛЬЮ Вставить часть, мои извинения за это. Я имел в виду, что исходные значения вставляются в столбцы целевой таблицы, включая приведенные выше столбчатые вычисления, сопоставленные с соответствующими целевыми столбцами. –

+0

Это имеет смысл. Когда вы это делаете, трудно понять, есть ли синтаксическая ошибка в этой части инструкции. – CDC

ответ

1

Ваша проблема, вероятно, в том, как вы выражаете эти обновления. Использование подзапроса отменяет псевдоним. То есть здесь SQL будет искать таблицу в вашей базе данных, фактически названную источником, которая, вероятно, не существует.

Target.colF= (SELECT CASE WHEN col1>0 THEN 1 END AS colF FROM Source), 

Вам не нужно формулировать это так, так как Source был алиасом, вы можете просто сказать

+0

Я попробую это. Я попытался заменить Source ссылкой на имя таблицы actaul в аргументе case, но это не сработало. Я попробую это. Благодарю. –

+0

Работает. Спасибо @Sam cd –

0

Ваша проблема здесь:

VALUES 
    ( Source values including derived values from above) 

Это что значит быть комментарий?

+0

Я, вероятно, немного ленился с КОГДА НЕ СКАЗАЛ ПО ЦЕЛЬЮ Вставить часть, мои извинения за это. Я имел в виду, что исходные значения вставляются в столбцы целевой таблицы, включая приведенные выше столбчатые вычисления, сопоставленные с соответствующими целевыми столбцами. –

Смежные вопросы