我正在尝试使用源 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/