考虑以下情况:
在我的数据库中:Table "Items" => Several thousand records, 35 columns
。
链接服务器:View "ItemInfo" => Several thousand records, 45 columns
。
两个中的一列(" ItemID")提供表和视图之间的匹配键(Unique, not NULL in both.)
30列(不计算ItemID)出现在两侧,但可能是不同类型。 E.g ,在视图ItemInfo
中,它是日期或数字字段,而在表Items
中有一个包含日期或数字的字符串。这种情况发生在大约一半的列上。
表和视图内容不完全匹配。
大约99%的行都出现在匹配ItemID
的两者中(但其他列可能具有不同的值)。另外1%只出现在一边。
我需要一个存储过程(在包含表Items
的数据库中)来更新表Items
,以便将视图ItemInfo
中的值复制到表中。 (对于匹配的行,视图中的值是前导。)
此外:如果表格Items
中没有行,则必须从视图ItemInfo
复制。表格中的附加内容(视图中不存在)可以保留原样。
我需要每天多次将表与视图同步,但突变的数量(每次同步)将非常低。可能没有。我无法判断视图中的条目是否实际上是" new"或者"更新"。
我目前提出的解决方案是分两步完成:
ItemInfo
中在表Items
中没有匹配项的行,在表Items
中插入该行,使用每个列的子表达式(如果需要)进行输入 - 转换。Items
运行更新,使用来自视图ItemInfo
的匹配条目(如果存在)中的相应值更新每个列(带有子表达式)。第2步显然非常低效,因为不需要更新绝大多数行。 自上次更新以来,实际上只会改变一小部分(如果有的话)。
整件事涉及到一些血腥的子表达,但我没有看到任何其他方法。
有人可以想出一个更好的想法来实现这样的事情吗?
澄清:
我不是在寻找解决问题的完整解决方案,而是寻找解决类似问题的一般方法
我确定未来几年我会多次面对这件事......
P.S。
我无法控制视图。只读只读访问权限。我确实可以完全控制表所在的数据库,但我无法改变表Items
本身的结构,因为还有其他软件与此表连接,我无法控制。如果需要,我可以自由添加临时表。