这是我们的使命:
- 从客户端接收文件。每个文件包含 1 到 1,000,000 条记录。
- 记录被加载到暂存区并应用业务规则验证。
- 然后将有效记录以批处理方式泵入 OLTP 数据库,规则如下:
- 如果记录不存在(我们有一个密钥,所以这不是问题),创建它。
- 如果记录存在,可选择更新每个数据库字段。该决定是根据三个因素之一做出的……我认为这些因素是什么并不重要。
我们的主要问题是找到一种在字段级别选择性地更新数据的有效方法。这适用于大约 12 个不同的数据库表,每个表中有 10 到 150 个字段(原始数据库设计还有很多不足之处,但它就是这样)。
我们的第一次尝试是引入一个反映暂存环境的表(每个系统字段的暂存字段)并包含一个屏蔽标志。掩蔽标志的值代表 3 个因素。
然后我们放置了一个类似于...的更新
UPDATE OLTPTable1 SET Field1 = CASE
WHEN Mask.Field1 = 0 THEN Staging.Field1
WHEN Mask.Field1 = 1 THEN COALESCE( Staging.Field1 , OLTPTable1.Field1 )
WHEN Mask.Field1 = 2 THEN COALESCE( OLTPTable1.Field1 , Staging.Field1 )
...
可以想象,性能相当可怕。
有没有人解决过类似的要求?
我们是一家 MS 商店,使用 Windows 服务来启动处理数据处理的 SSIS 包。不幸的是,我们在这方面几乎是新手。