如何使用JOIN与另一个表进行更新

时间:2013-09-29 19:09:35

标签: sql-server tsql sql-update

我有一个问题,我的选择工作没有更新 我的更新工作正常,没有选择 但当我结合我的代码时,不要对我做任何反应(不要工作 - 没有错误)

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

感谢看到和任何帮助

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您应该使用JOIN

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