【问题标题】:Merge statement error in SQL Server 2008SQL Server 2008 中的合并语句错误
【发布时间】:2011-11-17 15:21:58
【问题描述】:

我正在 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,我在 sql server management studio 2008 上执行查询但我正在连接到另一台服务器上的 sql server 2005 数据库的问题。现在它已经修复了。

标签: sql sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2


【解决方案1】:

在 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,但仅 SQL 2008 支持 MERGE。在 SQL 2005 下解析查询会出现语法错误。

【讨论】:

  • 感谢您的回复。这是我正在执行的查询,当双击错误消息时,它会突出显示“PopulationData AS a”行
  • 如果PopulationData包含其他非空字段,会不会导致这个错误?
  • 看起来您正在 SQL 2005 数据库中执行查询。
  • 非常感谢 Pondlife。你是对的,我连接的 sql server 是 2005。我当前的 sql management studio 是 2008。我刚刚连接到 2008 的数据库,它正在工作。再次感谢
  • @Joe123:您可能应该accept this answer,因为它似乎已经解决了与您的问题有关的所有问题。
【解决方案2】:

我在 sql server management studio 2008 上执行查询但我正在连接到另一台服务器上的 sql server 2005 数据库的问题。现在已经修复了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 2011-07-05
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多