我有像这样的Excel
region state city
-------------------------
south state1 city1
north state2 city2
我想填写像这样的数据库表
id name type
------------------------
1 state1 state
2 south region
3 city1 city
但我不知道如何对这些列和标题进行分组以填充数据库表。有任何想法吗?我很遗憾这个应用程序
答案 0 :(得分:1)
您可以使用Unpivot Transformation
中提供的Data Flow Task
在SSIS中实现此目的。以下示例说明了如何完成此操作。该示例使用SSIS 2008 R2
和SQL 2008 R2
数据库。
分步流程:
使用示例数据创建一个Excel文件,如屏幕截图# 1 所示。我已将该文件命名为 Source.xlsx 。
使用 SQL Scripts 部分下提供的脚本在名为dbo.Destination
的SQL Server数据库中创建一个表。此表将填充Excel数据。我引入了一个名为 GroupId 的新字段,以便将数据组合在一起。
在SSIS包上,创建名为Excel的Excel连接和名为SQLServer的OLE DB连接,如屏幕截图# 2 所示。 Excel connection manager
的配置应如屏幕截图# 3 所示。 OLE DB连接将配置为连接到您选择的数据库。
在包的Control Flow
标签上,放置Data Flow Task
,如屏幕截图# 4 所示。
配置数据流标签,如屏幕截图# 5 所示,其中包含Excel source
,Script component
,Unpivot transformation
和OLE DB destination
配置Excel Source
,如屏幕截图# 6 和# 7 所示。这将从Excel文件中读取数据。
将Script Component
配置为转化并添加Output
列,如屏幕截图# 8 所示。在Script
部分,点击Edit Script
,然后将代码替换为脚本组件代码部分下提供的代码。
配置Unpivot转换,如屏幕截图# 9 所示。我们不希望转换 GroupId ,因此请不要将其配置为Pass Through
。
配置OLE DB destination
,如屏幕截图# 10 和# 11 所示。
屏幕截图# 12 会在 包裹执行之前显示表格dbo.Destination
中的数据。
屏幕截图# 13 显示包执行。
屏幕截图# 14 会在 包执行后显示表dbo.Destination
中的数据。
希望有所帮助。
SQL脚本:
CREATE TABLE [dbo].[Destination](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](255) NULL,
[Type] [nvarchar](255) NULL,
[GroupId] [int] NULL,
CONSTRAINT [PK_Destination] PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO
脚本组件代码:
C#代码,只能在 SSIS 2008 or above
中使用。
/* Microsoft SQL Server Integration Services Script Component
* Write scripts using Microsoft Visual C# 2008.
* ScriptMain is the entry point class of the script.*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
int groupId = 1;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.GroupId = groupId;
groupId += 1;
}
}
屏幕截图#1:
屏幕截图#2:
屏幕截图#3:
屏幕截图#4:
屏幕截图#5:
屏幕截图#6:
屏幕截图#7:
屏幕截图#8:
屏幕截图#9:
屏幕截图#10:
屏幕截图#11:
屏幕截图#12:
屏幕截图#13:
屏幕截图#14: