Я хочу обновить два поля в таблице, а второе зависит от нового значения первого. Также вычисление первого является интенсивным, поэтому я не хочу его выполнять дважды. Для того, чтобы сделать себя более ясным здесь пример, который работает, но выполняет вычисления дважды:Могу ли я повторно использовать значение в заявлении об обновлении?
update MyTable
set col1 = dbo.HeavyCalculationFunction(),
col2 = dbo.HeavyCalculationFunction() + 1
То, что я хотел бы сделать, это:
update MyTable
set col1 = dbo.HeavyCalculationFunction(),
col2 = col1 + 1
Это также executs успешно, но использует старое значение col1 когда это вычисляя новое значение col2. Так же можно использовать новый, то есть:
update MyTable
set col1 = dbo.HeavyCalculationFunction(),
col2 = col1(NEW VALUE) + 1
вы не могли бы обернуть это в сделке и просто сделать два заявления обновления, если вы не хотите, чтобы вычислить, что поле в два раза? –
как насчет сохранения результата функции в переменной –
Перед выполнением команды полного обновления будет сохранено новое значение в col1. Вы можете использовать два оператора обновления –