You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019报错:关键字'ON'附近语法错误,求解决方案

问题分析与解决

你的SQL语句报错主要源于语法错误,同时还有一个必须满足的前提条件,具体说明如下:

1. 直接语法错误

MySQL的ON DUPLICATE KEY UPDATE子句不需要重复指定表名Overview,你的语句里UPDATE Overview SET IpAddress = '127.0.0.1'这部分多写了表名,这是触发报错的直接原因。

修正后的基础语句:

INSERT INTO Overview ([Computername], [IpAddress]) 
VALUES('test', '127.0.0.1') 
ON DUPLICATE KEY UPDATE IpAddress = '127.0.0.1';

如果要使用动态IP(比如变量、函数获取的实时地址),直接替换值即可,示例:

-- 用变量存储动态IP的写法
INSERT INTO Overview ([Computername], [IpAddress]) 
VALUES('test', @dynamic_ip) 
ON DUPLICATE KEY UPDATE IpAddress = @dynamic_ip;

2. 生效的必要前提

ON DUPLICATE KEY UPDATE能触发更新的核心前提是:Computername字段必须是主键,或者被设置了唯一索引。如果该字段没有唯一约束,重复的Computername记录不会触发更新,而是直接插入新数据,完全不符合你的需求。

如果还没设置唯一约束,可以用这条语句添加:

ALTER TABLE Overview ADD UNIQUE INDEX idx_computername (Computername);

额外优化建议

如果更新的字段值和插入VALUES中的内容一致,可使用VALUES()函数简化语句,避免重复写值:

INSERT INTO Overview ([Computername], [IpAddress]) 
VALUES('test', '127.0.0.1') 
ON DUPLICATE KEY UPDATE IpAddress = VALUES(IpAddress);

后续修改IP时只需改动VALUES部分,无需重复调整UPDATE段。

内容的提问来源于stack exchange,提问作者sean_zer00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:35:18