我在Visual Studio 2008中使用SSIS.我需要处理许多XML文件并将其放入现有的数据库结构(SQL Server 2005).这是我第一次尝试使用SSIS而且有点卡住了.我找到了XML数据流任务,为它分配了一个测试xml文件,它与XSD相关联,并将一个节点映射到数据库表.我的问题是,如何将许多xsd节点与许多表相关联?当然,我不必为每个表设置XML源代码?
我在SSIS 2012中遇到了一个非常简单的任务问题.
我有一个for-each容器,它在FOR-EACH-FILE枚举器模式下运行.我想用XML文件读取目标文件夹.正确配置了文件夹的路径.files字段设置为*.xml
变量映射使用以下变量定义:User :: FileVar,Index 0.
现在我在容器中添加一个简单的数据流任务.数据流任务只有一个XML数据源任务,就是这样.对于XML数据源任务,将设置XSD位置.当我单击选择列时,我可以看到XSD架构中的列.
但是:当我保存XML任务时,我总是收到错误消息:The Property XMLDataVariable is empty.我尝试了数据访问模式,变量的XML文件和变量的XML数据.错误消息仍然存在,我无法运行该程序包.
我不使用任何表达式,既不在foreach循环容器也不在数据流任务.
我不知道这里有什么问题,我完成了旧版SSIS教程中所示的步骤.
你有什么想法?
在SQL Server中将XML文件导入并验证到单个表(展平)时,最佳做法是什么?
我有一个XML文件,其中包含大约15种复杂类型,这些类型都与单个父元素相关.SSIS设计可能如下所示:
但是所有这些(15)连接变得非常复杂.
将T-SQL代码写入以下内容可能是一个更好的主意:
1)将XML导入XML类型的列并链接到XSD架构.
2)使用此代码:
TRUNCATE TABLE XML_Import
INSERT INTO XML_Import(ImportDateTime, XmlData)
SELECT GETDATE(), XmlData
FROM
(
SELECT *
FROM OPENROWSET (BULK 'c:\XML-Data.xml', SINGLE_BLOB) AS XMLDATA
) AS FileImport (XMLDATA)
delete from dbo.UserFlat
INSERT INTO dbo.UserFlat
SELECT
user.value('(UserIdentifier)', 'varchar(8)') as UserIdentifier,
user.value('(Emailaddress)', 'varchar(70)') as Emailaddress,
businessaddress.value('(Fax)', 'varchar(70)') as Fax,
employment.value('(EmploymentData)', 'varchar(8)') as EmploymentData,
-- More values here ...
FROM
XML_Import CROSS APPLY
XmlData.nodes('//user') AS User(user) CROSS APPLY
user.nodes('BusinessAddress') AS BusinessAddress(businessaddress) CROSS APPLY
user.nodes('Employment') AS Employment(employment)
-- More 'joins' …Run Code Online (Sandbox Code Playgroud)