sql - 根据另一列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 逐行运行,但我的表中有数百万条记录,并且执行脚本需要很长时间。请提出处理这种情况的最简单和最快的方法。
解决方案
如果在 +,-,/,* 列中只有一个运算符,则可以为每个运算符编写更新查询
根据数据的分布,首先批量解决简单的操作,将加快处理速度
-- 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生成这些查询。
对于多个运算符,您将需要一个解析器,因为您需要注意运算符和其他规则的顺序。
推荐阅读
- node.js - Raspberry pi 零 w 上的 Puppeteer
- assembly - 如何手动重新排列 MIPS 代码以最小化所需的 NOP 数量?
- xml - 使用 XSLT-1 测试 XML 数据是在周中还是周末?
- c++ - 函数返回指针
- javascript - 颜色选择器没有响应
- django - Django unittest - 如何仅禁用控制台日志记录
- c# - 如何覆盖数据库中的数据?[ASP.NET]
- java - 为什么 file.delete() 或 file.deleteOnExit() 不删除我的文件
- kubernetes - StatefulSet pod 始终处于挂起状态
- laravel-5 - Laravel 全局变量到特定视图