【问题标题】:Move data to production tables after Bulk Insert to stage table在批量插入到暂存表后将数据移动到生产表
【发布时间】:2015-08-13 09:37:32
【问题描述】:
我有一个标准化的数据库,如下图所示。我存储每个帐户的客户、帐户和邮政地址。如您所见,Client-Account 关系类型是多对多的,针对 ClientAccount 表。
由于我有一个包含 100k 帐户记录的数据库,因此我正在考虑使用 SQL 批量复制。我认为我可以使用一个包含上述表格所有字段的阶段表,然后对数据进行规范化。
我的问题是我不知道如何将数据移动到生产表中。批量插入导入后,如何创建存储过程来执行此作业?
PS:该数据库是作为启用了 EF 的 ASP .Net 网站使用的。
【问题讨论】:
标签:
asp.net
sql-server
database
entity-framework
【解决方案1】:
您必须以正确的顺序一次插入一张表
地址 -> 账户 -> 客户 -> AccountClient
-
创建地址:
Insert into Address(data)
Select distinct address_data From temp
-
帐户
Inser Into Account(account_number, address_id)
Select t.account_number, a.id From temp t
Inner Join Address a on a.data = t.address_data
-
客户
Insert into Client(name, client_number)
Select distinctname, client_number From temp
客户帐户
插入 ClientAccount(accountId, clientId)
Select a.accountId, c.clientId From temp t
在 c.name = t.name 和 c.client_number = t.client_number 上的内部加入客户端 c
a.account_number= t.account_number 上的内部加入帐户 a
确保:
- 如果某些数据已经存在,则不要创建重复项
- 您匹配右侧列中真实表和临时表之间的行