我可以在更新声明中重用一个值吗?

时间:2016-06-09 08:45:15

标签: sql-server tsql

我想更新表中的两个字段,但第二个字段取决于第一个字段的新值。第一个的计算是密集的,所以我不想执行它两次。为了让自己更清楚,这是一个有效但可以执行两次计算的例子:

update MyTable
set col1 = dbo.HeavyCalculationFunction(),
    col2 = dbo.HeavyCalculationFunction() + 1

我想做的是:

update MyTable
set col1 = dbo.HeavyCalculationFunction(),
    col2 = col1 + 1

这也成功执行,但在计算新的col2值时使用col1的旧值。那么可以使用新的,即:

update MyTable
set col1 = dbo.HeavyCalculationFunction(),
    col2 = col1(NEW VALUE) + 1

3 个答案:

答案 0 :(得分:3)

感谢@MyoMyintAung的想法:

declare @c1 int
update MyTable
set @c1 = col1 = dbo.HeavyCalculationFunction(),
    col2 = @c1 + 1

答案 1 :(得分:2)

尝试使用变量:

DECLARE @Varname <TheType>
SELECT @Varname = dbo.HeavyCalculationFunction()
update MyTable
    set col1 = @Varname,
        col2 = @Varname + 1

或两个更新声明:

update MyTable
    set col1 = dbo.HeavyCalculationFunction(),

update MyTable
    set col2 = col1 + 1

答案 2 :(得分:2)

我建议使用变量来存储函数结果。

Declare @tempData [some data type]
SET @tempData = dbo.HeavyCalculationFunction();

update MyTable
set col1 = @tempData,
    col2 = @tempData + 1