首页 > 解决方案 > 根据另一列Sql Server中给出的公式更新表中的列

问题描述

我有一个有 4 列的表:

Col1  Col2      Col3       Col4
1      2      Col1+Col2     3
3      4      Col1*Col2     12
6      3      Col1/Col2     2

Col1, Col2 会有一些值,col3 会有一个公式,基于该公式我需要在 col4 中填充值。我已经尝试使用动态 SQL 逐行运行,但我的表中有数百万条记录,并且执行脚本需要很长时间。请提出处理这种情况的最简单和最快的方法。

标签: sqlsql-server

解决方案


如果在 +,-,/,* 列中只有一个运算符,则可以为每个运算符编写更新查询

根据数据的分布,首先批量解决简单的操作,将加快处理速度


-- Bulk operation for Col1 * Col2
UPDATE Table
    Set Col4 = Col1 * Col2
WHERE LEN(Col4) - LEN(REPLACE(Col4, '*', '')) = 1 -- Only has one *
AND Like 'Col1%'
AND Like '%Col2'
-- Doesn't have other operator
AND NOT LIKE '%+%'
AND NOT LIKE '%*%'
AND NOT LIKE '%/%'

如果您有多个列/组合,则可以使用T4生成这些查询。

对于多个运算符,您将需要一个解析器,因为您需要注意运算符和其他规则的顺序。


推荐阅读