我正在尝试使用源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命令的替代方法?
答案 0 :(得分:5)
处理此问题的最佳方法是分多步完成。不要丢掉你目前的工作;它将作为不同解决方案的一部分。
首先,在数据库中创建一个临时表。这将是平面文件中数据的中间和临时位置。为了简化后续步骤,最好为平面文件中的每个字段创建一个列,即使不需要某些数据。在回到SSIS设计之前创建表。
在SSIS中,为数据库创建一个OLE DB连接管理器,为平面文件创建另一个连接管理器。考虑到你问题中的信息,你可能已经有了这个。
创建数据流任务。在“数据流”任务中,创建一个平面文件源并将其链接到您的平面文件。创建OLE DB目标并将其链接到临时表。将数据流路径从源映射到目标。
下一步是调整OLE DB命令以使用新表中的数据。在“控制流”工作空间中,从新数据流任务到现有OLE DB命令创建优先约束(两个任务之间的行)。这将使数据流首先运行,然后运行OLE DB命令。
在OLE DB命令中修改SQL脚本,以便它引用新表和关联的列名。该脚本不应引用该文件。我不认为SQL脚本中需要进行任何其他更改。