Ошибка оператора слияния в SQL Server 2008 - PullRequest
4 голосов
/ 17 ноября 2011

Я выполняю следующий оператор слияния в SQL Server 2008:

MERGE 
PopulationData AS a
USING ImagesData AS b
ON a.ID = b.ID
WHEN MATCHED THEN
UPDATE SET a.SURNAME = 'joe123'
WHEN NOT MATCHED THEN INSERT(a.ID,a.SURNAME)
VALUES (12454,'joe123');

У меня следующая ошибка:

Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'AS'.

Может кто-нибудь сказать мне, где синтаксическая ошибка.

Ответы [ 2 ]

9 голосов
/ 17 ноября 2011

При анализе вашего запроса в SQL Management Studio выдается следующая ошибка:

Сообщение 10739, уровень 15, состояние 1, строка 7 Список столбцов вставки, используемый в оператор MERGE не может содержать идентификаторы из нескольких частей. Использовать один вместо этого идентификаторы деталей.

Затем я удаляю идентификаторы ...

MERGE 
PopulationData AS a
USING ImagesData AS b
ON a.ID = b.ID
WHEN MATCHED THEN
UPDATE SET a.SURNAME = 'joe123'
WHEN NOT MATCHED THEN INSERT(ID,SURNAME)
VALUES (12454,'joe123');

... и запрос успешно анализируется. Следовательно, синтаксическая ошибка почти наверняка не исходит из вашего оператора MERGE. Вы действительно выполняете только то заявление, которое вы опубликовали, или это часть более крупного сценария или процедуры? Если дважды щелкнуть сообщение об ошибке, оно должно выделить строку с синтаксической ошибкой (по крайней мере, в SQL 2008).

Обновление: я заметил, что вы пометили вопрос для SQL 2005 и 2008, но MERGE поддерживается только в SQL 2008. При синтаксическом анализе запроса в SQL 2005 возникает синтаксическая ошибка.

0 голосов
/ 25 ноября 2011

проблема в том, что я выполнял запрос в SQL Server Management Studio 2008, но я подключался к базе данных SQL Server 2005 на другом сервере. Теперь это исправлено

...