2013-09-29 58 views
-1

我有一個問題,我的選擇工作正常,沒有更新 和我的更新工作正常,沒有選擇 ,但是當我把兩個我的代碼不做任何反應給我(不工作 - 沒有錯誤)如何更新使用JOIN與另一個表

UPDATE Table1 
SET 
l2p= 0.207 * (SELECT DUM FROM Table2 WHERE [no] < 1389) 
WHERE [no] < 1389 

由於看到任何幫助

+0

你想達到什麼目的? –

+0

我很驚訝,你沒有得到錯誤。你應該得到子查詢返回多個行錯誤 – DevelopmentIsMyPassion

+0

可能的重複[我怎樣才能做一個與JOIN UPDATE語句在SQL?](http://stackoverflow.com/questions/1293330/how-can-i-do-an -update-statement-with-join-in-sql) –

回答

1

嘗試聲明一個變量來保存SELECT語句的結果。

DECLARE @DUM INT 
SET @DUM = (SELECT ISNULL(DUM, 1) FROM Table2 WHERE [no] < 1389) 

UPDATE Table1 
SET 
l2p= 0.207 * @DUM 
WHERE [no] < 1389 

如果你有多個記錄,這是不行的,你需要加入對Table2 ...

UPDATE t 
SET t.l2p = 0.207 * ISNULL(t2.DUM, 1) 
FROM Table1 t INNER JOIN Table2 t2 
    ON t.[no] = t2.[no] 
WHERE t.[no] < 1389 

你真的應該使用存儲過程,如下...

CREATE PROCEDURE [dbo].[sprocName] 
    @No INT 
AS 
BEGIN 

    SET NOCOUNT ON; 

    UPDATE t 
    SET t.l2p = 0.207 * ISNULL(t2.DUM, 1) 
    FROM Table1 t INNER JOIN Table2 t2 
     ON t.[no] = t2.[no] 
    WHERE t.[no] < @No 
END 

要運行存儲的過程中,使用EXEC sprocName @No=1389

+0

感謝幫助我不使用JOINT befor它(所以我必須嘗試使用​​聯合感謝很多)你幫忙完整 –

+0

這是一次性更新,或者是否可能改變?[否]?如果是這樣,你應該使用存儲過程 – christiandev

+0

是否應該在我的代碼中使用「[no]」鍵? –

1

你應該使用JOIN

UPDATE Table1 
SET Table1.l2p = 0.207 * Table2.DUM 
FROM Table1 JOIN Table2 ON Table1.[no] = Table2.[no] 
WHERE Table1.[no] < 1389 
+0

謝謝,但我不知道如何使用它:X –

+0

有一個錯字,現在嘗試。 –

+0

然後你應該學習,這是你需要的,不要只是尋找一個臨時解決方案。 –