sql - 如何用 CSV 数据更新 SQL 表?

标签 sql csv ssis oledb

我正在尝试使用源 CSV 文件中的新列更新我的一个 SQL 表。此文件中的这些 CSV 记录已在我的 SQL 表中,但缺少此 CSV 文件中的某些列。

我已经将新列添加到我的 SQL 表中。但现在我只需要从新列中导入数据。我怎样才能做到最好?

我正在尝试使用 SSIS 2008 来执行此操作。我创建了一个平面文件 CSV 数据源。然后我添加了一个 OLE DB 命令。我将 SQL 命令设置如下:

update berkeley.dbo.j5c_ALL_DATA 
set disabilitycode=[Stu Pri Dis],
IEPID=SpecED
,[MT_AR_CR]=[Met At-Rsk Crit]
      ,[ECP]=[Early Childhood Program]
      ,[REF_CFC]=[Ref by CFC]
      ,[IEP_COM_DT]=[IEP Cmp Date]
      ,[E1_NUM]=[EI Nbr]
      ,[RDIT]=[Reason for Delay in Transition]
      ,[MT_PFA_HI]=[Met PFA Inc Crt]
      ,[FS]=[Family Structure]
      ,[Hm_Sch_RCDTS]=[RCDTS Home]
      ,[Srv-Sch_RCDTS]=[RCDTS Serve]
from berkeley.dbo.j5c_ALL_DATA A join Berkeley_CSV2 b ON
A.studentid = B.[SAP ID] and A.BegEnrollDate = B.[Enroll Date]

其中 Berkeley_CSV2 是我的 CSV 平面文件连接管理器的名称。但是我得到一个错误:

The connection manager "Berkeley_CSV2" is an incorrect type.  The type required is "OLEDB".  The type available to the component is "FLATFILE".

您能否向我推荐一种添加此数据的替代方法或其他 SQL 命令?

最佳答案

处理此问题的最佳方法是分多个步骤。不要扔掉你目前的工作;它将适合作为不同解决方案的一部分。

首先,在您的数据库中创建一个暂存表。这将是平面文件中数据的中间和临时位置。为了简化后续步骤,最好为平面文件中的每个字段创建一个列,即使不需要某些数据。在返回 SSIS 设计之前创建表。

在 SSIS 中,为您的数据库创建一个 OLE DB 连接管理器,为您的平面文件创建另一个。根据您问题中的信息,您可能已经准备就绪。

创建数据流任务。在数据流任务中,创建一个平面文件源并将其链接到您的平面文件。创建一个 OLE DB 目标并将其链接到您的暂存表。映射从源到目标的数据流路径。

下一步是调整 OLE DB 命令以处理新表中的数据。在控制流工作区中,从新的数据流任务到现有的 OLE DB 命令创建优先约束(两个任务之间的线)。这将使数据流首先运行,然后是 OLE DB 命令。

在 OLE DB 命令中修改您的 SQL 脚本,以便它引用新表和关联的列名。脚本不应引用该文件。我认为 SQL 脚本中不需要任何其他更改。

关于sql - 如何用 CSV 数据更新 SQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579616/

相关文章:

mysql查询将三列之和插入新列

mysql - 仅在数据库查询时名字和姓氏的首字母

MySQL在主表上创建具有连接行的字段

sql - 从SQL Server全文索引中获取前n个最新条目

Python:读取和写入 CSV 文件

encryption - gpg : decryption failed: No secret key

python - CSV 到文本文件布局

java - 如何在 apache Camel 中使用 Splitter EIP 将 csv 文件一次拆分为 20 行?

c# - 从 SSIS 2012 脚本组件中的 PipelineBuffer 获取列名称

ssis - 如何消除 SSIS 作业中的 'unused output column' 警告?