HCa*_*ill 15 sql-server csv ssis etl ssis-2012
我需要使用带有SSIS的CSV文件创建数据库.CSV文件包含四列:
我需要使用该表的信息来填充我在下面的SQL中创建的三个表.
我已经意识到我需要的是使用Employee Table的一列EmployeeNumber
和Group Table GroupID
来填充EmployeeGroup表.为此,我认为Join Merge表是我需要的,但是我在SSIS中创建了数据流任务,结果是相同的,没有数据显示.
中间表是用于关联其他表的表.
我在SSIS中创建了包,并填充了Employee和Group Tables,但没有填充EmployeeGroup表.EmployeeGroup仅显示没有数据的EmployeeNumber和Group ID列.
我是新用的SSIS,我真的不知道还能做什么.我将非常感谢你的帮助.
Had*_*adi 12
这可以仅使用2个数据流任务来完成,但根据问题中提到的OP I am new using SSIS, and I really do not know what else to do
,我将提供最简单的解决方案,即3 DataFlow任务,以避免使用更多的组件,如MultiCast
.
因为你想构建一个关系数据库并从csv中提取关系,所以你必须阅读csv 3次 - 将它作为3个单独的文件来考虑 -.
首先,您必须导入Employees和Groups Data,然后您必须导入它们之间的关系表.
每个导入步骤都可以在单独的数据流任务中完成
SynchronousInputID Property
为None
并添加OutGroupname
类型的输出列DT_STR
在" 脚本"部分中,编写以下代码:
Imports System.Collections.Generic
Private m_List As New List(Of String)
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.GroupName_IsNull AndAlso
Not String.IsNullOrEmpty(Row.GroupName.Trim) Then
If Not m_List.Contains(Row.GroupName.Trim) Then
m_List.Add(Row.GroupName.Trim)
CreateOutputRows(Row.GroupName.Trim)
End If
End If
End Sub
Public Sub CreateOutputRows(ByVal strValue As String)
Output0Buffer.AddRow()
Output0Buffer.OutGroupName = strValue
End Sub
Run Code Online (Sandbox Code Playgroud)在OLEDB目标映射OutGroupName
到GroupName
列
Groupname
柱:有一个区别就是你要选择的EmployeeID
,Employee Name
,LoginName
如输入列脚本组件和使用ID
列,而不是Groupname
列在comparaison在LookUp Transformation Component中,选择Groups
Table作为Lookup表
映射GroupName
列和获取Group ID
输出
Ignore Failure
在错误输出配置中选择
在Oledb目标地图列中,如下所示
注意:GroupID
必须是Identity(在sql server中设置)
你必须做相同的步骤3中的数据流任务的解决方案,而不是增加2个数据流任务到Group
和Employee
,只需添加一个数据流任务,并经过Flat File Source
添加MultiCast
组件复制的流量.然后对于第一个流使用相同Script Component
并OLEDB Destination
在Employee
数据流任务中使用,并为第二个流使用Script Component
和OLEDB Destination
相关Group
.
有很多方法可以通过T-SQL命令将Flat文件导入SQL
假设已安装的Microsoft ACE OLEDB版本Microsoft.ACE.OLEDB.12.0
和csv文件位置相同C:\abc.csv
首先将数据导入员工和组表
INSERT INTO [GROUP]
([Group Name])
SELECT
[Group Name]
FROM
OPENROWSET
(
'Microsoft.ACE.OLEDB.12.0','Text;Database=C:\;IMEX=1;','SELECT * FROM abc.csv'
) t
INSERT INTO [Employee]
([Employee Number],[Employee Name],[LoginName])
SELECT
[Employee Number],[Employee Name],[LoginName]
FROM
OPENROWSET
(
'Microsoft.ACE.OLEDB.12.0','Text;Database=C:\;IMEX=1;','SELECT * FROM abc.csv'
) t
Run Code Online (Sandbox Code Playgroud)导入Employee_Group数据
INSERT INTO [EmployeeGroup]
([Employee Number],[GroupID])
SELECT
t1.[Employee Number],t2.[GroupID]
FROM
OPENROWSET
(
'Microsoft.ACE.OLEDB.12.0','Text;Database=C:\;IMEX=1;','SELECT * FROM abc.csv'
) t1 INNER JOIN GROUP t2 ON t1.[Group Name] = T2.[Group Name]
Run Code Online (Sandbox Code Playgroud)首先将数据导入员工和组表
INSERT INTO [GROUP]
([Group Name])
SELECT
[Group Name]
FROM
OPENROWSET
(
'MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv'
) t
INSERT INTO [Employee]
([Employee Number],[Employee Name],[LoginName])
SELECT
[Employee Number],[Employee Name],[LoginName]
FROM
OPENROWSET
(
'MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv'
) t
Run Code Online (Sandbox Code Playgroud)导入Employee_Group数据
INSERT INTO [EmployeeGroup]
([Employee Number],[GroupID])
SELECT
t1.[Employee Number],t2.[GroupID]
FROM
OPENROWSET
(
'MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\;',
'SELECT * FROM abc.csv'
) t1 INNER JOIN GROUP t2 ON t1.[Group Name] = T2.[Group Name]
Run Code Online (Sandbox Code Playgroud)注意:您可以将数据导入到临时表,然后查询此表,以避免多次连接到csv文件
有许多方法可以将csv文件导入SQL Server,您可以查看以下链接以获取其他信息.
归档时间: |
|
查看次数: |
1262 次 |
最近记录: |