将来自多个源表的数据合并到一个目标表中

问题描述:

我正在尝试编写一个将一个表的内容转换为另一个表的存储过程,但是我不知道从哪里开始。在我的场景中,我有4个表格:[Source],[Type_A],[Type_B] & [Destination]。将来自多个源表的数据合并到一个目标表中

[来源]有2列,其值需要结转到[目的地]。 [Source]中的一列是“type”(鉴别器)。

如果“type”为0,那么我需要从[Type_A] &中添加一个列的子集,并在添加了一些静态值的情况下向[Destination]添加记录。

如果“类型”为1,则我需要拉列的子集从[TYPE_B] &添加一条记录至[目的地]一些不同静态值添加。

每次执行此存储过程时都会处理不定数量的记录,用户将从ASP.NET应用程序调用此存储过程。

我是SQL中的一个相对newb,所以请原谅我,如果解决方案是简单的。我知道我可以在代码(C#)中迭代执行此操作,但我宁愿避免多个数据库调用的开销&想将整个事件包装在事务中。

如果任何人都可以告诉我如何才能做到这一点,我会非常感激。

谢谢!

假定有来源,TYPE_A和TYPE_B之间的关系:

INSERT INTO Destination 
    (Col1, Col2, Col3, Col4, Col5) 
    SELECT s.Col1, 
      s.type, 
      /* The next two columns illustrate choosing a */ 
      /* subset from either Type_A or Type_B   */ 
      COALESCE(a.Col3, b.Col3), 
      COALESCE(a.Col4, b.Col4), 
      /* The next column illustrates choosing a  */ 
      /* static value based on Source.type   */ 
      CASE WHEN s.type = 0 THEN 'Static Value 1' 
       WHEN s.type = 1 THEN 'Static Value 2' 
       ELSE NULL 
      END /* CASE */ 
     FROM Source s 
      LEFT JOIN Type_A a 
       ON s.Col1 = a.Col1 
        AND s.type = 0 
      LEFT JOIN Type_B b 
       ON s.Col1 = b.Col1 
        AND s.type = 1 
+0

我将不得不调整这一点得到一切拉我需要的方式,但是这是非常有帮助!好东西!谢谢乔! – Mysterei 2012-02-03 15:26:26