SQL Server使用查找转换导入的数据

SQL Server使用查找转换导入的数据,sql,csv,ssis,sql-server-2012,etl,Sql,Csv,Ssis,Sql Server 2012,Etl,我(理论上)将数据从CSV文件导入SQL server数据库,如下所示: Accounts.csv: AccountID,AccountHolder,Balance ABC-1234,Person A,100000.50 CDE-4567,Person B,30.75 FGH-8910,Person C,25.00 Transactions.csv FromAccount,ToAccount,TransferAmount FGH-8910,FGH-8910,25 ABC-456,FGH-891

我(理论上)将数据从CSV文件导入SQL server数据库,如下所示:

Accounts.csv:

AccountID,AccountHolder,Balance
ABC-1234,Person A,100000.50
CDE-4567,Person B,30.75
FGH-8910,Person C,25.00
Transactions.csv

FromAccount,ToAccount,TransferAmount
FGH-8910,FGH-8910,25
ABC-456,FGH-8910,28
FGH-8910,CDE-4567,60
假设我正在将这些数据集成到我现有的表中(
Account
Trans
),这些表具有与上述相同的结构,但我有不同的帐户编号系统(我的
Account
表的
AccountID
列是
INT-IDENTITY(1,1)

我可以使用SQL Server导入和导出向导将Accounts.csv导入Accounts表,并排除AccountID列,这三个帐户将被导入
Account
表,AccountID将由identity列分配

但是,当我进入import transactions.csv时,我有旧的帐号

然后如何导入Transactions.csv并用标识列分配的新accountID替换accountID


我怀疑这可以在SSIS中实现,但我想知道是否有办法使用
OPENQUERY
/
批量导入

Process Accounts.csv id首先,向文件中添加一个新的id列,或者使用新的帐户id生成一个新文件

然后通过将旧帐户ID替换为新帐户ID来预处理事务文件


最后,处理新的事务文件。

从CSV文件插入暂存表dbo.Account\u staging(不带标识列)

编辑/清理/操作导入的数据

使用T-SQL语句将数据复制到实际表中,如下所示:

INSERT INTO dbo.Account (AccountHolder,Balance)      
SELECT AccountHolder,Balance FROM dbo.Account_Staging

假设帐户的事务表上也会有一个FK,安全吗?@RossBush在我们导入的数据库上,是的(在FromAccount和ToAccount列上,您无法按照您描述的方式使用批量导入来匹配新id。SSIS是我唯一的选项吗?这取决于,您将不得不在某个时候对数据进行后期处理。我如何创建查找,以确定哪个“旧”帐号与每个“新”帐号连接帐号?还将事务加载到暂存表dbo.Transactions\u staging中,然后是一个游标,用于更新/连接两个表的id OK,因此这将为我提供没有帐号的帐户和具有旧帐号的事务?在暂存表中,您有旧帐号,在插入主表之前,您需要游标更新/联接表的r