2014-09-19 107 views
1

我想將一個表中的值合併到另一個表中。其中一個值是一個條件值,但它看起來像我沒有正確得到語法。最初,我使用了IF-THEN-ELSE語句,但建議使用CASE語句。帶條件語句的SQL INSERT IF then then

這裏的要點是失敗的語法:如果我不落實的情況

CREATE PROCEDURE EmployeeMerge 
AS 
BEGIN 
    SET NOCOUNT ON; 
    MERGE INTO Employee AS t1 
    USING 
     (SELECT 
       EmployeeName, 
       Zip, 
       UpdateDate 
     FROM table2) AS t2 
     ON (t1.EmployeeID = t2.EmployeeID) 
    WHEN MATCHED AND t2.UpdatedDate > t1.UpdatedDate THEN 
     UPDATE 
     SET 
      t1.EmployeeName = s.EmployeeName, 
      t1.Zip = 
       (CASE 
        WHEN t2.ZipExt IS NULL OR t2.ZipExt = '' THEN t2.Zip 
        ELSE (t2.Zip + '-' + t2.ZipExt) 
       END), 
      t1.UpdatedDate = t2.UpdateDate 
    WHEN NOT MATCHED THEN 
     INSERT (EmployeeName, 
      Zip, 
      ModDate) 
     VALUES 
      (t2.Name, 
      (CASE 
       WHEN t2.ZipExt IS NULL OR t2.ZipExt = '' THEN t2.Zip 
       ELSE (t2.Zip + '-' + t2.Zip_Ext) 
      END), 
      t2.UpdatedDate) 
    OUTPUT 
     deleted.*, 
     $action, 
     inserted.* 
END; **-- A MERGE statement must be terminated by a semi-colon (;)** 
GO 

這MERGE語句工作得很好,即簡單地設置t1.Zip = t2.Zip,但當然,這是避免t2.ZipExt字段。

+0

您必須使用大小寫切換[看到這篇文章](http://stackoverflow.com/questions/15820405/sql-insert-into-table-with-select-case-values) – Max 2014-09-19 17:22:19

+0

擺脫如果和使用一個案例。發佈完整的SQL,如果你想要更多的細節:) – UnhandledExcepSean 2014-09-19 17:22:45

+0

@Max,我已經更新了我的SQL語句,請參考,謝謝! – user118190 2014-09-19 17:45:48

回答

2

MERGE語句必須用分號(;)結束

您還沒有用分號結束的MERGE。您已終止BEGIN-END。移動分號。

+0

我剛剛弄明白了我自己,當我加載SO來更新我的線程時,我注意到了你的答案。我不能監督這個簡單的問題。謝謝! – user118190 2014-09-19 20:54:39

0

我從來沒有真正關心合併命令。有時候我可以看到使用它,但大多數情況下,它比我喜歡我的SQL更復雜。

UPDATE e 
SET  e.EmployeeName=t1.EmployeeName 
    , e.Zip=CASE 
       WHEN t1.ZipExt IS NULL OR t1.ZipExt = '' THEN t1.Zip 
       ELSE (t1.Zip + '-' + t1.ZipExt) 
      END 
    , e.UpdatedDate=t1.UpdatedDate 
FROM Employee e 
INNER JOIN Table t1 ON e.EmployeeID = t1.EmployeeID 
WHERE t1.UpdatedDate > e.UpdatedDate 

INSERT INTO Employee (EmployeeName,Zip,UpdatedDate) 
    SELECT 
      t1.EmployeeName 
     , t1.Zip=CASE 
       WHEN t1.ZipExt IS NULL OR t1.ZipExt = '' THEN t1.Zip 
       ELSE (t1.Zip + '-' + t1.ZipExt) 
      END 
     , t1.UpdatedDate 
    FROM Table t1 
    LEFT JOIN Employee e ON e.EmployeeID = t1.EmployeeID 
    WHERE e.EmployeeID IS NULL 
+0

我改變我的MERGE爲一個UPDATE和INSERT語句,因爲你有,我仍然得到一個語法錯誤「不正確的語法附近'='。」在t1.Zip和CASE之間的INSERT語句中。有什麼建議麼?謝謝! – user118190 2014-09-19 19:56:20

+0

因爲我已經刪除了前面的零件,所以需要刪除最後一個零件 – UnhandledExcepSean 2014-09-19 19:57:18

+0

哦,幾乎忘記了,我還通過CASE語句結尾處的兩個額外右括號(即END關鍵字後)更改了代碼。你會同意嗎? – user118190 2014-09-19 19:57:59