SQL Server 2008中的合并语句错误

4
我正在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'.

请问有人可以告诉我语法错误出在哪里吗?


如果在 MERGE 关键字之前加上分号会发生什么?? MERGE 是那些坚持成为 T-SQL 批处理中的第一条语句之一的语句...也许您有其他语句在此之前吗?? - marc_s
1
感谢marc_s,我的问题是我在SQL Server Management Studio 2008上执行查询,但我连接到另一台服务器上的SQL Server 2005数据库。现在已经解决了。 - Joe123
2个回答

9
在SQL Management Studio中解析您的查询时,我收到以下错误消息:

Msg 10739, Level 15, State 1, Line 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下解析查询会导致语法错误。


谢谢回复。我正在执行的是查询,当双击错误消息时,它会突出显示“PopulationData AS a”这一行。 - Joe123
如果PopulationData包含其他非空字段,这会导致出现此错误吗? - Joe123
看起来你正在 SQL 2005 数据库中执行查询。 - Pondlife
非常感谢Pondlife。你是对的,我连接的SQL Server是2005年的。我的当前SQL管理工具是2008年的。我刚刚连接到一个2008年的数据库,它正在工作。再次感谢。 - Joe123
@Joe123:你应该接受这个答案,因为它似乎解决了与你的问题相关的所有问题。 - Andriy M

0

我在SQL Server Management Studio 2008上执行查询,但连接到另一台服务器上的SQL Server 2005数据库时出现了问题。现在已经解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接