Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并到从db2到SQL Server的转换中_Sql_Sql Server_Merge_Db2 - Fatal编程技术网

合并到从db2到SQL Server的转换中

合并到从db2到SQL Server的转换中,sql,sql-server,merge,db2,Sql,Sql Server,Merge,Db2,我正在尝试将这个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

我正在尝试将这个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)
在我看来,最后一个版本尊重文档中的语法,但我仍然得到:

Incorrect syntax near the keyword 'ON'.

你有一个放错地方的括号可以使用,我还把你的别名从wish换成target,从new换成src

merge into wishlist as target
using (
 select *
 from (
  values ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )) 
   as new(ID, USER_ID, CONTENT_ID, CONTENT_TYPE, SKU, date, timestamp, VALUE, TITLE, URL, IMAGE_URL, ZONE)
  ) as src /* <--- added `) as src` to end using() */
   on [target].[content_id] = [src].[content_id] 
  and [target].[value] = [src].[value] 
  and ([target].[sku] is null or [target].[sku] = [src].[sku])
  WHEN matched THEN
    update
      set id = src.id
        , date = src.date
        , timestamp = src.timestamp 
  WHEN not matched THEN
  insert (ID, USER_ID, CONTENT_ID, CONTENT_TYPE, SKU, date, timestamp, VALUE, TITLE, URL, IMAGE_URL, ZONE ) 
  values (src.ID, src.USER_ID, src.CONTENT_ID, src.CONTENT_TYPE, src.SKU, src.date, src.timestamp, src.VALUE, src.TITLE, src.URL, src.IMAGE_URL, src.ZONE ) 
  --) /* <-- doesn't go here */