2016-09-07 38 views
-1

更新表變量時遇到問題。我已經聲明它,但是當我運行整個查詢我得到這個錯誤:「。」附近的語法錯誤。雖然更新變量表

Incorrect syntax near '.'.

,我似乎無法來解決這個問題...

UPDATE @List 
SET nrID = CASE 
       WHEN nrID IS NULL 
       THEN t1.nrID 
       ELSE nrID 
      END 
FROM @List 
INNER JOIN table1 t1 ON @List.PNr = t1.PNr 
INNER JOIN table2 t2 ON t1.n nrPNr = t2.nrPNr 
WHERE t1.PNr = t2.PNr AND t2.Isactive = 0 
+2

試圖從這裏「SET @ List.nrID」取出表名,你已經告訴它,你要更新什麼表。 –

+3

你給了table2「O」的別名,但你加入了「t2」的別名。代碼中沒有定義「t2」。 – JiggsJedi

+0

此外,如果您將'nrID'加入到'table1' - 您的set/case語句是多餘的,'@List.nrID'將永遠不會爲空,因爲它是一個連接謂詞,並且null無法加入任何內容無法評估平等。換句話說,你內部連接到'table1'會立即刪除所有具有null @@.List.nrID'的行 - 所以每一行匹配都會被更新爲'@ List.nrID'。 – JiggsJedi

回答

0

感謝您的幫助,更改了我的聲明@table創建@temptable,它帶走了我不正確的語法錯誤。

至於我使用的查詢(例子);

UPDATE Person 
    SET Car = ISNULL(@Car, Car), 
     HairColour = ISNULL(@HairColour, HairColour), 
1
UPDATE List 
SET List.nrID = t1.nrID 
FROM @List AS List 
INNER JOIN table1 t1 ON List.nrID = t1.nrID 
INNER JOIN table2 t2 ON t1.nrID = t2.nrID 
WHERE t1.nrID = t2.nrID AND t2.Isactive = 0 

由於在評論中提到的內部聯接將刪除您的案例中的任何空值

0

試試這個,

UPDATE L 
SET L.nrID = ISNULL(t1.nrID, t2.nrID) 
FROM @List L 
INNER JOIN table1 t1 ON L.PNr = t1.PNr 
INNER JOIN table2 t2 ON t1.nrPNr = t2.nrPNr 
WHERE t1.PNr = t2.PNr 
    AND t2.Isactive = 0