根据现有数据动态生成新数据

时间:2014-03-31 16:09:07

标签: sql tsql

很难解释我尝试使用单词实现的目标......

我在这里使用两张桌子。其中一个客户列出了他们的unqiue参考。第二个表(数据表),其中包含一些通用数据,这些数据通过引用链接到客户。

我想要的是复制数据表中的每个现有行,并替换每个客户的客户参考。

实施例

CustomerTable
ID, Name, Address
001, ABC, ABC
002, DEF, DEF
003, GHI, GHI

DataTable (before)
ID, Detail1, Detail2, Detail3
001, A, B, C
001, D, E, F
001, G, H, I

DataTable (after)
ID, Detail1, Detail2, Detail3
001, A, B, C
001, D, E, F
001, G, H, I
002, A, B, C
002, D, E, F
002, G, H, I
003, A, B, C
003, D, E, F
003, G, H, I

这将更新数千行,因此我不知道最有效的方法。像程序员一样看待它我想使用数组和循环,但这可能不是T-SQL中最好的方法。

1 个答案:

答案 0 :(得分:2)

在SQL中,您实际上只是在寻找一组交叉连接的结果,然后可以将这些结果创建到表中。

根据您的示例:

SELECT CustomerTable.ID, DataTable.Detail1, DataTable.Detail2, DataTable.Detail3 
INTO New_DataTable
FROM CustomerTable
CROSS JOIN DataTable 

这将创建一个包含正确数据的新表(New_DataTable)。然后,您可以重命名旧表并将新表重命名为原始名称。可以使用sp_rename存储过程来执行此操作。

sp_rename DataTable, Original_DataTable
sp_rename New_DataTable, DataTable

您必须保证没有人会更新现有的DataTable来进行切换。