尝试按照此示例进行操作: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
答案 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
。