我有一个问题,我的选择在没有更新的情况下运行良好,我的更新在没有选择的情况下运行良好,但是当我将两个代码结合起来时,对我没有任何反应(不工作 - 没有错误)
UPDATE Table1
SET
l2p= 0.207 * (SELECT DUM FROM Table2 WHERE [no] < 1389)
WHERE [no] < 1389
感谢看到和任何帮助
我有一个问题,我的选择在没有更新的情况下运行良好,我的更新在没有选择的情况下运行良好,但是当我将两个代码结合起来时,对我没有任何反应(不工作 - 没有错误)
UPDATE Table1
SET
l2p= 0.207 * (SELECT DUM FROM Table2 WHERE [no] < 1389)
WHERE [no] < 1389
感谢看到和任何帮助
尝试声明一个变量来保存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
你应该使用JOIN
:
UPDATE Table1
SET Table1.l2p = 0.207 * Table2.DUM
FROM Table1 JOIN Table2 ON Table1.[no] = Table2.[no]
WHERE Table1.[no] < 1389