【发布时间】:2017-09-26 16:51:08
【问题描述】:
我正在尝试使这个 db2 查询适应 SQL Server
MERGE INTO wishlist AS wish USING
(SELECT * FROM TABLE (VALUES
(?,?,?,?,?,?,?,?,?,?,?,?)))
AS new(ID, USER_ID, CONTENT_ID,CONTENT_TYPE,
SKU, DATE, TIMESTAMP, VALUE, TITLE, URL, IMAGE_URL, ZONE)
ON
(wish.content_id = new.content_id and wish.value = new.value and
(wish.sku is null or wish.sku = new.sku))
WHEN MATCHED THEN UPDATE SET id = new.id , date = new.date, timestamp =
new.timestamp
WHEN NOT MATCHED THEN INSERT
(ID, USER_ID, CONTENT_ID, CONTENT_TYPE, SKU, DATE, TIMESTAMP, VALUE,
TITLE, URL, IMAGE_URL, ZONE)
VALUES (new.ID, new.USER_ID, new.CONTENT_ID,
new.CONTENT_TYPE, new.SKU, new.DATE, new.TIMESTAMP, new.VALUE,
new.TITLE, w.URL, new.IMAGE_URL, new.ZONE)
我想出的是:
MERGE INTO wishlist AS wish
USING
( SELECT * FROM (VALUES
(?,?,?,?,?,?,?,?,?,?,?,?))
AS new(ID, USER_ID, CONTENT_ID, CONTENT_TYPE, SKU, DATE, TIMESTAMP, VALUE,
TITLE, URL, IMAGE_URL, ZONE)
ON
([wish].[content_id] = [new].[content_id] and [wish].[value] = [new].[value]
and ([wish].[sku] is null or [wish].[sku] = [new].[sku]))
WHEN MATCHED THEN
UPDATE SET id = new.id , date = new.date, timestamp = new.timestamp
WHEN NOT MATCHED THEN
INSERT (ID, USER_ID, CONTENT_ID, CONTENT_TYPE, SKU, DATE, TIMESTAMP, VALUE,
TITLE, URL, IMAGE_URL, ZONE) VALUES (new.ID, new.USER_ID, new.CONTENT_ID,
new.CONTENT_TYPE, new.SKU, new.DATE, new.TIMESTAMP, new.VALUE, new.TITLE,
new.URL, new.IMAGE_URL, new.ZONE)
在我看来,最后一个版本尊重文档https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql 中的语法,但我仍然得到:
Incorrect syntax near the keyword 'ON'.
【问题讨论】:
标签: sql sql-server merge db2