SQL UPDATE将一列设置为另一个值并在同一步骤中更改值

时间:2011-09-15 15:47:32

标签: tsql

采取以下更新声明。

UPDATE  TABLE_1
SET     Units2 = ABS(Units1)
        ,Dollars2=ABS(Dallars1)
        ,Units1 =0
        ,Dollars1 =0
WHERE Units1 < 0
AND   Dollars2 = 0

以下是我的问题,

1)这合法吗?它解析并“似乎”工作(在测试表上),但它是否总是有效,或者我只是选择正确的记录进行审查。

2)有更好的方法来做到这一点。

谢谢,

3 个答案:

答案 0 :(得分:5)

这是合法的,只要您希望基本上保留Units1Dollars1中应该有效的Units2Dollars2的旧值

这是一个测试:

CREATE TABLE #Table_1
(
    Units1 INT,
    Dollars1 MONEY,
    Units2 INT,
    Dollars2 MONEY
)
GO

INSERT INTO #Table_1 (Units1, Dollars1, Units2, Dollars2)
VALUES (-1,12.00,3,0.00)
GO

UPDATE  #TABLE_1
SET     Units2 = ABS(Units1)
        ,Dollars2=ABS(Dollars1)
        ,Units1 =0
        ,Dollars1 =0
WHERE Units1 < 0
AND   Dollars2 = 0
GO

SELECT * 
FROM  #Table_1

输出:

Units1 | Dollars1 | Units2| Dollars2
0      | 0.00     | 1     | 12.00

答案 1 :(得分:4)

假设你在谈论Dollars1专栏,我认为应该没问题。读取应使用当前值,写入在计算完成后提交。

如果你现在质疑它,虽然我建议把它分成两个陈述。你是作者,你不清楚。对那个必须维护它的人有点遗憾,现在就说清楚。

答案 2 :(得分:1)

您的查询是正确的,几乎就是这样做的。