我花了一天的时间来寻找任何可以帮助我的东西,但这SSIS是一个巨大的工具,到目前为止没有任何用处,或者我可能只是不理解它.
我需要一个旧的Access数据库,它有一些问题,并将其移动到SQL服务器.我已经在我的SQL数据库中设置了架构.需要修复旧数据,例如规范化和删除重复项.我的老板坚持使用SSIS这项工作,因为我们需要一个知道如何使用它的人,而且目前几乎没有人这样做(一位经理很久以前就使用过它).
所以,我在BDIS或视觉工作室中设置了一个项目,或者这个应用实际上是什么.我创建了一个连接管理器到我的Access数据库,我设法将OLE DB源拖到设计器上并将其设置为连接到该数据库.我还发现我可以从那里选择数据.
怎么办?我真的更喜欢有一种方法来编写一个巨大的SQL脚本来从Access数据库获取我需要的所有数据,将其转换为我想要的,并将其推送到SQL服务器数据库中.但看起来我需要在设计器中使用所有这些时髦的转换工具.我也无法弄清楚如何将结果数据导入SQL服务器.我在服务器资源管理器窗格中设置了连接,但在线的每个人都说从不使用SQL Server目标.所以我也迷失了.
我的老板说Books Online帮助文件非常有用.到目前为止,它就像在大海淹没的大海捞针中找到一根针,其上有三座城堡.信息太多了,对我来说似乎没什么用.
希望更多的信息将是有用的.我认为随附的向导SSIS对我想要的东西来说不够强大,所以如果它们是,你必须请解释它.这是我必须要做的一个例子,除了我的现实是有更多变换的表.
假设我有一个如下所示的源表:
Companies
====================================================
| Name | Address | WidgetOne | WidgetTwo |
|--------------------------------------------------|
| ACME | 123 etc. | Trampoline | Cannon |
====================================================
Run Code Online (Sandbox Code Playgroud)
我需要将其标准化为两个表.显然,它必须跟踪ID,以便小部件与正确的公司相关联.如果你可以帮助一个如何处理这种情况的例子SSIS,从Access到SQL服务器,那么我可以从那里采取它.谢谢!
小智 33
以下示例可能会为您提供从MS Access到SQL Server执行数据迁移的想法.该示例使用MS Access 2010和SQL Server 2008 R2数据库.这个包是写的SSIS 2008 R2.与以前提供的解决方案不同,此答案不使用SQL Server导入和导出向导,并且包是从头开始构建的.
分步过程:
假设Access表如屏幕截图#1所示,其中一个表以Companies非规范化方式包含两行.
并且还假设SQL Server中的表结构如屏幕截图#2和#3所示,其中两个表名为dbo.CompanyInfo和dbo.WidgetInfo.SQL Scripts部分提供了创建表脚本.表格为空,如屏幕截图#4所示.
创建一个新的SSIS包.在SSIS包上,右键单击连接管理器,然后选择New OLE DB Connection,如屏幕截图#5所示.在"配置OLE DB连接管理器"上,单击"新建..."按钮,如屏幕截图#6所示.
在Connection Manager上,选择Native OLE DB/Microsoft Jet 4.0 OLE DB Provider并提供Access文件路径.在这个例子中,我有文件C:\temp\Source.mdb.单击确定.参见截屏#7.在"配置OLE DB连接管理器"上,单击"确定",如屏幕截图#8所示.将连接管理器名称更改为AccessDB(名称可以是您喜欢的任何名称).参见截图#9.
再次,右键单击Connection Manager并选择New OLE DB Connection,如屏幕截图#10所示.这次我们将为SQL Server创建一个连接字符串.选择Native OLE DB\SQL Server Native Client 10.0并提供服务器名称和数据库名称,如屏幕截图#11所示.将连接管理器重命名为SQLServer(同样,名称是您的选择).参见截屏#12.
在SSIS包的"控制流"选项卡上,放置数据流任务并将其命名为Populate CompanyInfo.双击数据流任务以切换到"数据流"选项卡.在数据流任务中,放置a OLE DB Source,a Derived Transformation和a OLE DB Destination,如屏幕截图#13所示.NOTE:您需要按所示顺序逐个配置任务.不要同时放置所有任务并尝试连接它们.
配置OLE DB源以读取Access数据库表,如屏幕截图#14和#15所示.配置Derived转换以将字符串文本从Access数据库转换为Unicode,如屏幕截图#16所示.配置OLE DB目标以将数据插入SQL表,如屏幕截图#17和#18所示.
返回Control Flow选项卡并放置另一个数据流任务,如屏幕截图#19所示.
在第二个数据流任务中,我们在Access数据库中读取相同的Companies表,并尝试在SQL中填充WidgetInfo表.
放置一个OLE DB Source以读取Access表并将其配置为屏幕截图#20和#21中所示.放置一个Derived transformation将字符串转换为Unicode,如屏幕截图#22所示.放置一个Lookup transformation根据名称和地址获取CompanyId并配置任务,如屏幕截图#23和#24所示.默认情况下,查找任务如果找不到匹配项将失败.我们需要规范化Widget数据.因此,Unpivot transformation如屏幕截图#25所示,放置并配置它.放置一个OLE DB Destination以将数据插入SQL并配置它,如屏幕截图#26和#27所示.第二个数据流任务将如屏幕截图#28所示
屏幕截图#29 - #31显示示例包执行.
屏幕截图#32显示了包执行后SQL表中的数据.
我希望这应该给出从Access数据库导出数据到SQL服务器的想法.您可以在Access中对表进行分组,并在单个数据流任务中加载它们.如果存在依赖于其他表的表,则可以将其置于单独的数据流任务中,如本示例所示.
希望有所帮助.
SQL脚本:
CREATE TABLE [dbo].[CompanyInfo](
[Id] [int] IDENTITY(1,1) NOT NULL,
[CompanyName] [nvarchar](80) NOT NULL,
[CompanyAddress] [nvarchar](255) NOT NULL,
CONSTRAINT [PK_CompanyInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
CREATE TABLE [dbo].[WidgetInfo](
[Id] [int] IDENTITY(1,1) NOT NULL,
[CompanyId] [int] NOT NULL,
[WidgetName] [nvarchar](40) NOT NULL,
CONSTRAINT [PK_WidgetInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
截图#1:

截图#2:

截图#3:

截图#4:

截图#5:

截图#6:

截图#7:

截图#8:

截图#9:

截图#10:

截图#11:

截图#12:

截图#13:

截图#14:

截图#15:

截图#16:

截图#17:

截图#18:

截图#19:

截图#20:

屏幕截图#21:

截图#22:

屏幕截图#23:

屏幕截图#24:

截图#25:

屏幕截图#26:

屏幕截图#27:

截图#28:

屏幕截图#29:

截图#30:

屏幕截图#31:

屏幕截图#32:

| 归档时间: |
|
| 查看次数: |
46743 次 |
| 最近记录: |