【问题标题】:SQL Server Transform Imported Data Using LookupSQL Server 使用查找转换导入的数据
【发布时间】:2018-10-21 22:21:48
【问题描述】:

我(理论上)将数据从 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

假设我正在将此数据集成到我现有的表(AccountTrans)中,它们具有与上述相同的结构,但我有不同的帐号系统(我的 Account 表的 AccountID 列是 @ 987654327@)

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

但是,当我来导入 transactions.csv 时,我有旧帐号。

然后如何导入 Transactions.csv 并将 accountID 替换为由标识列分配的新 AccountID?

我怀疑这可以在 SSIS 中完成,但我想知道是否还有使用 OPENQUERY / BULK IMPORT 的方法?

【问题讨论】:

  • 可以安全地假设账户的交易表上也会有一个 FK 吗?
  • @RossBush 在我们要导入的数据库上,是的(在 FromAccount 和 ToAccount 列上
  • 您无法按照您描述的方式使用批量导入来匹配新 id。
  • SSIS 是我唯一的选择吗?
  • 视情况而定,您将不得不在某个时候对数据进行后期处理。

标签: sql csv ssis sql-server-2012 etl


【解决方案1】:

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

然后通过将旧帐户 ID 替换为新帐户 ID 来预处理交易文件。

最后,处理新的交易文件。

【讨论】:

    【解决方案2】:

    从 CSV 文件插入临时表 dbo.Account_Staging(不带 IDENTITY 列)

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

    使用以下 T-SQL 语句将数据复制到真实表中:

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

    【讨论】:

    • 我如何创建关于哪个“旧”帐号与每个“新”帐号连接的查找?
    • 还将事务加载到临时表 dbo.Transactions_Staging 中,然后是更新/加入两个表的 id 的游标
    • 好的,这会给我没有账号的账户和旧账号的交易?
    • 在暂存表中,您有旧帐号,在插入主表之前,您需要更新/加入表的光标
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多