它用于更新现有行,但不会在没有条目时插入行。我正在尝试使用MERGE编写MS SQL Server Upsert查询
这是CREATE TABLE:
CREATE TABLE [dbo].[Inventory_Update_Hash_Code] ([Product_Id] [int] NOT
NULL, [Feed_Id] [int] NOT NULL, [Hash_Code] [int] NOT NULL,
[Last_Updated] [datetime2](0) NOT NULL
GO
ALTER TABLE [dbo].[Inventory_Update_Hash_Code] ADD PRIMARY KEY
([Product_Id], [Feed_Id])
GO
这是查询:
MERGE Product_Update_Hash_Code WITH (HOLDLOCK) AS tar
USING (SELECT Feed_Id, Product_Id FROM Product_Update_Hash_Code WHERE
Feed_Id = 261 AND Product_Id = 300) AS source
ON (tar.Feed_Id = source.Feed_Id AND tar.Product_Id = source.Product_Id)
WHEN MATCHED THEN
UPDATE SET tar.Hash_Code = 55, tar.Last_Updated = SYSUTCDATETIME()
WHEN NOT MATCHED
THEN INSERT (Feed_Id, Product_Id, Last_Updated, Hash_Code)
VALUES (261, 300, SYSUTCDATETIME(), 55);
它看起来像 “不匹配” 的条款没有得到执行。我弄错了吗?
你在使用MySQL,MS SQL Server吗?或者MSQL ...?不要标记不涉及的产品。 – jarlh
我很抱歉。我错误地添加了MySQL。它是Microsoft SQL 2008. –
目标表也是源代码很少是正确的 - 当您将表本身用作行源时,您期望获得无与伦比的结果吗? –