如果公式各类不多的话按不同公式来更新即可:
--表结构
CREATE TABLE [dbo].#t1
(
T DECIMAL(18, 2),
L DECIMAL(18, 2),
A DECIMAL(18, 2),
Q INT,
公式 NVARCHAR(999),
值 DECIMAL(18, 2)
);
--数值
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 3200,3840, 3300,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/(L-T) ELSE 0 END' )
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 8,10, 0,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/L ELSE 0 END' )
--变量
DECLARE @i INT, @n INT;
DECLARE @gs VARCHAR(500);
DECLARE @sql VARCHAR(MAX);
--按公式类别分类
SELECT ROW_NUMBER() OVER (ORDER BY 公式) rowid, 公式 INTO #tt FROM #t1 GROUP BY 公式;
--按公式类别遍历
SELECT @i = MIN(rowid), @n = MAX(rowid)FROM #tt;
WHILE (@i <= @n)
BEGIN
SELECT @gs = 公式 FROM #tt WHERE rowid = @i;
SET @sql = 'update #t1 set 值=' + @gs + ' where 公式=''' + @gs + ''''; --生成脚本
EXEC (@sql); --执行脚本,可以print看效果
SET @i = @i + 1;
END;
SELECT * FROM #t1;