使用WHILE循环将多个表中的指定列插入到一个表中

时间:2015-05-26 21:22:46

标签: sql sql-server tsql

我有3张桌子。我必须从其中两个表中选择几个指定的列,并将它们插入到一个表中。然而,当我试图将它们“混合”为一体时,它不会像我预期的那样发展。

[表A]

Col_A    Col_B    Col_C    Col_D ...
  101       10       15      AAA
  102       20       25      BBB

[表B]

Col_D    Col_E    Col_F    Col_G ...
  201       30       35      CCC
  202       40       45      DDD

[TableC]('目标'表)

   Column_01             Column_02            Column_03 ...
TableA.Col_A-Row1     TableA.Col_B-Row1            0
       0                     0            TableB.Col_E-Row_1 ...
TableA.Col_A-Row2     TableA.Col_B-Row2            0
       0                     0            TableB.Col_E-Row_2 ...
       0                     0            TableB.Col_E-Row_3 ...
       0                     0            TableB.Col_E-Row_4 ...

我需要从TableA和TableB向TableC插入一些列(不是全部),并且在插入TableA列时,必须将默认值(在本例中为0)插入到其余列中。 TableB的案例也是如此。 这些插入操作的一个狡猾点是,TableA与TableB的记录具有1toN的关系。

现在我想通过简单的查询实现它,如下所示:

INSERT INTO TableC (
  Column_01, Column_02, Column_03 ...
)
SELECT 
  TableA.Col_A, Table_A.Col_B, 0 ...
FROM TableA

但我也听说过我可以使用Cursor在TableA循环中迭代TableB ...

有什么方法可以解决这个问题吗?我已经阅读了几本TSQL和SQL Server编程书籍,但它们都没有描述这样的'查询设计糟糕的表',只是简单的SQL基础知识。

我知道这不是一个复杂的问题,但我是Stored Procedure和TSQL的新手,我不知道从哪里开始。

感谢。

1 个答案:

答案 0 :(得分:0)

使用游标可能不是一个好主意。由于tableA和tableB之间没有匹配的列(无关系);你可以和UNION一起做insert into select from

INSERT INTO TableC (
  Column_01, Column_02, Column_03 ...
)
SELECT 
  TableA.Col_A, Table_A.Col_B, 0 ...
FROM TableA
UNION
SELECT 0, 0, TableB.Col_D, TableB.Col_E, ...
FROM TableB