在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' here ...
Run Code Online (Sandbox Code Playgroud)
填写'UserFlat'表?
一些缺点是您必须手动键入SQLcode,但这里的优点是我可以更直接地控制元素的处理和转换方式.但我不知道在SSIS中处理XML和使用T-SQL XML语句处理XML之间是否存在任何性能差异.
请注意,其他一些要求是:
请指教.
小智 6
根据您提到的要求,我会说您可以使用世界上最好的(T-SQL和SSIS).
我觉得T-SQL在加载您在问题中描述的XML数据时提供了更大的灵活性.
有很多不同的方法可以实现这一目标.这是一个可能的选择:
创建一个存储过程,该过程将XML文件的路径作为输入参数.
使用您认为更容易的T-SQL方式执行XML数据加载操作.
使用SSIS包执行错误处理,文件处理,存档和发送电子邮件.
使用SSIS中提供的日志记录功能.它只需要简单的配置.以下是一个示例,说明如何在SSIS中配置日志记录如何在SSIS数据流任务中跟踪成功处理或失败的行的状态?
模拟流程的示例如下面的屏幕截图所示.使用Foreach循环容器循环文件.将文件路径作为参数传递给Execute SQL Task,然后执行SQL Task,调用您提到的T-SQL.处理完文件后,使用文件系统任务将文件移动到存档文件夹.
SSIS中从文件夹 中读取多个xml文件时使用的示例显示了如何使用Foreach循环容器循环访问文件.它循环遍历xml文件,但使用数据流任务,因为xml文件格式更简单.
在如何使用SSIS包从电子邮件正文中的表发送记录中使用的示例?显示如何使用"发送邮件任务"发送电子邮件.
在处理文件后如何将文件移动到存档文件夹中使用的示例?显示如何将文件移动到Archive文件夹.
在SSIS中的文件系统任务之后分支中使用的示例在不使程序包失败的情况下显示如何在特定任务失败后继续执行程序包.这将帮助您继续执行包执行,即使Foreach循环失败,您也可以发送电子邮件.屏幕截图中的蓝色箭头表示完成上一个任务.
在如何使用SSIS包中的Foreach循环容器选择最近创建的文件夹中使用的示例?展示了如何执行模式匹配.
希望能给你一个想法.

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