如何用CSV数据更新SQL表?

时间:2010-08-26 21:20:49

标签: 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命令的替代方法?

1 个答案:

答案 0 :(得分:5)

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

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

在SSIS中,为数据库创建一个OLE DB连接管理器,为平面文件创建另一个连接管理器。考虑到你问题中的信息,你可能已经有了这个。

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

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

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