SQL Server执行REPLACE INTO查询报错,求排查错误及正确用法
问题原因
SQL Server 不支持REPLACE INTO语法,这个写法是MySQL等其他数据库的特性,所以执行时会触发语法错误。
解决方案
你可以用以下两种SQL Server原生支持的方式实现“存在则更新,不存在则插入”的逻辑:
方法1:使用MERGE语句(推荐,标准语法)
MERGE是SQL Server专门用于这类“UPSERT”(更新或插入)操作的语句,示例代码如下:
MERGE [wine].[Spirits] AS target USING (VALUES ('1', '1a', '2b', 'd', '12.00')) AS source (skuId, name, packageDescription, packageValue, price) ON target.skuId = source.skuId WHEN MATCHED THEN UPDATE SET name = source.name, packageDescription = source.packageDescription, packageValue = source.packageValue, price = source.price WHEN NOT MATCHED THEN INSERT (skuId, name, packageDescription, packageValue, price) VALUES (source.skuId, source.name, source.packageDescription, source.packageValue, source.price);
方法2:使用IF EXISTS判断(简单场景适用)
先检查记录是否存在,存在则执行更新,不存在则执行插入:
IF EXISTS (SELECT 1 FROM [wine].[Spirits] WHERE skuId = '1') BEGIN UPDATE [wine].[Spirits] SET name = '1a', packageDescription = '2b', packageValue = 'd', price = '12.00' WHERE skuId = '1' END ELSE BEGIN INSERT INTO [wine].[Spirits] (skuId, name, packageDescription, packageValue, price) VALUES ('1', '1a', '2b', 'd', '12.00') END
注意:确保skuId列是主键或唯一约束,否则以上逻辑无法正确判断重复记录。
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

