使用不匹配的列

时间:2016-04-12 14:38:26

标签: sql sql-server

考虑以下情况:

在我的数据库中: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"或者"更新"。

我目前提出的解决方案是分两步完成:

  1. 对于视图ItemInfo中在表Items中没有匹配项的行,在表Items中插入该行,使用每个列的子表达式(如果需要)进行输入 - 转换。
  2. 对表Items运行更新,使用来自视图ItemInfo的匹配条目(如果存在)中的相应值更新每个列(带有子表达式)。
  3. 第2步显然非常低效,因为不需要更新绝大多数行。 自上次更新以来,实际上只会改变一小部分(如果有的话)。

    整件事涉及到一些血腥的子表达,但我没有看到任何其他方法。
    有人可以想出一个更好的想法来实现这样的事情吗?

    澄清:
    我不是在寻找解决问题的完整解决方案,而是寻找解决类似问题的一般方法 我确定未来几年我会多次面对这件事......

    P.S。
    我无法控制视图。只读只读访问权限。我确实可以完全控制表所在的数据库,但我无法改变表Items本身的结构,因为还有其他软件与此表连接,我无法控制。如果需要,我可以自由添加临时表。

0 个答案:

没有答案