2012-10-26 40 views
1

有人能告訴我爲什麼這個插入失敗,但不給我一個錯誤?我該如何解決?合併不插入。沒有錯誤

merge table1 as T1 
using(select p.1,p.2,p.3,p.4,p.5 from @parameters p 
inner join table1 t2 
on p.1 = t2.1 
and p.2 = t2.2 
and p.3 = t2.3 
and p.4 = t2.4) as SRC on SRC.2 = T1.2 
when not matched then insert (p.1,p.2,p.3,p.4,p.5) 
values (SRC.1,SRC.2,SRC.3,SRC.4,SRC.5) 
when matched then update set t1.5 = SRC.5; 

T1表格當前爲空,因此沒有任何內容可以匹配。參數表中確實有數據。我只需要修改這個合併,以便在決定做什麼之前檢查所有4個字段。

回答

0

其實,你可以使用一個變量表。檢查出來:

MERGE Target_table AS [Target] 
    USING @parameters AS [Source] 
    ON (

     [Target].col1 = [Source].col1 
     AND [Target].col2 = [Source].col2 
     AND [Target].col3 = [Source].col3 
     AND [Target].col4 = [Source].col4 
     ) 
    WHEN NOT MATCHED BY TARGET 
    THEN INSERT (col1,col2,col3,col4,col5) 
    VALUES (
       [Source].col1 
       ,[Source].col2 
       ,[Source].col3 
       ,[Source].col4 
       ,[Source].col5 
       ) 
    WHEN MATCHED 
    THEN UPDATE SET [Target].col5 = [Source].col5; 
+0

這是否解決了這個問題,或者這只是原始的重構?如果使用select語句作爲源,並且它不匹配任何記錄,則合併將導致沒有插入任何內容並且沒有錯誤消息。所以在你原來的問題中,如果你把這個源的select語句直接運行,它應該不返回任何行。 –

相關問題