2012-05-14 100 views
2

我想通過檢查記錄通過SQL腳本的某些條件檢查到表中添加記錄。我正在嘗試使用合併聲明。它不工作無法找出我出錯的地方。有人可以幫我弄這個嗎?。由於SQL Server 2008合併聲明檢查並插入,如果記錄不存在

MERGE Categories As target 
    USING (
    SELECT CategoryKey 
    From Categories where CategoryName = 'TestName' 
    ) AS source on (source.CategoryKey = target.CategoryKey) 
WHEN Not Matched THEN 
    INSERT VALUES ('TestName'); 

回答

2

這將做的工作:

MERGE Categories As target 
USING (SELECT 'TestName' AS CategoryName) AS source 
    ON (source.CategoryName = target.CategoryName) 
WHEN NOT MATCHED THEN 
    INSERT (CategoryName) VALUES ('TestName'); 
+0

非常感謝AdaTheDev!它真的幫助 – Vinoth

2

究竟是你想實現什麼目標?

我問,因爲你使用的是同一個表作爲目標和源,因爲你是比較CategoryKey,我以爲是主鍵,在WHEN Not Matched條件永遠不會被評估,因爲如果你有ID的表1,2和3,並在ID = ID的情況下對其自身進行比較,所有行將評估爲true。

嘗試改變WHEN Not Matched THENWHEN Matched then UPDATE,寫一個簡單的測試更新SOP,你可以看到的行爲我談論

編輯 試試這個(假設你的ID是自動遞增)

MERGE Categories As target 
    USING (
    SELECT CategoryKey 
    From Categories where CategoryName = 'TestName' 
    ) AS source on (source.CategoryName = target.CategoryName) 
WHEN Not Matched THEN 
    INSERT VALUES ('TestName'); 
+0

感謝迭戈的迴應。但我不想更新記錄,我所需要做的就是檢查是否存在與CategoryName爲'TestName'的記錄。如果存在什麼都不做,否則我想添加一條記錄。 – Vinoth

+0

再次閱讀我的答案。我說要運行一次更新,以便你能理解正在發生的事情。你寫你的查詢的方式你永遠不會得到一個「WHEN不匹配」 – Diego