在关键字“on”附近插入错误的语法

时间:2018-03-09 00:30:24

标签: sql

尝试按照此示例进行操作:Insert into a MySQL table or update if exists

我提出了这个问题,但我一直在说:

  

关键字“ON”附近的语法不正确。

此查询有什么问题?

INSERT INTO us_TEST (cell, [date], valueFlag, [value]) 
VALUES ('USW00024061', '2018-01-01', 'XXX', 299)
ON DUPLICATE KEY 
    UPDATE [value] = 299

2 个答案:

答案 0 :(得分:2)

SQL是许多数据库产品使用的标准语言,但每个制作SQL数据库产品的公司都会为SQL语言添加超出标准语言的额外功能。

运行查询SELECT @@version;这将告诉您正在使用Microsoft SQL Server。阅读示例以及如何解释它在此处告诉您的内容:https://www.mssqltips.com/sqlservertip/2563/understanding-the-sql-server-select-version-command/

INSERT ... ON DUPLICATE KEY UPDATE功能特定于MySQL,它是一种实现SQL语言的特定产品。

Microsoft的产品不支持INSERT ... ON DUPLICATE KEY UPDATE。但是,微软可能会使用不同的语法并根据您的需要进行操作。见Does SQL Server Offer Anything Like MySQL's ON DUPLICATE KEY UPDATE

微软用户通过短昵称“SQL”继续调用他们的数据库产品真的很烦人。它应该被称为“Microsoft SQL Server”或“SQL Server”。

SQL是数据库查询的行业标准编程语言的名称,而不是特定的品牌或产品名称。

简单地调用Microsoft数据库“SQL”就像使用文本编辑器并将其称为“Word”。 ; - )

答案 1 :(得分:1)

您无法在SQL Server中执行此操作。语法适用于MySQL。

merge us_test as target using
      (values ('USW00024061', '2018-01-01', 'XXX', 299)
      ) as source(cell, [date], valueFlag, [value])
      on target.cell = source.cell  -- is this the right column?
when matched then
    update set [value] = source.[value]
when not matched then
    insert (cell, [date], valueFlag, [value]) values (cell, [date], valueFlag, [value]);

实际上,merge是非常先进的功能。您也可以坚持使用基本update / insert