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