【发布时间】:2011-08-26 10:41:07
【问题描述】:
在 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 ...
填充“UserFlat”表?
一些缺点是您必须手动键入 SQLcode,但这里的优点是我可以更直接地控制元素的处理和转换方式。但是我不知道在SSIS中处理XML和用T-SQL XML语句处理XML有什么性能差异。
请注意,其他一些要求是:
- 错误处理:如果出现错误,必须向某人发送电子邮件。
- 能够处理具有特定文件名模式的多个输入文件:XML_{date}_{time}.xml
- 将处理后的 XML 文件移至其他文件夹。
请指教。
【问题讨论】:
-
SSIS 是一个可视化工具,允许 SQL 受损者执行简单的任务。如果你会写 T-SQL,SSIS 只会妨碍你。
-
@Andomar 显然不理解 SSIS,如果他这样描述的话。对于每个人来说——如果你更熟悉或更喜欢 T-SQL——那就使用它。 SSIS 的 XML 源是有限的,但如果它在你的情况下工作,并且你已经完成了它,那么只要性能相当,我就会使用它。我希望 T-SQL 执行得更快,但 SSIS 无疑比 T-SQL 具有更好的错误处理能力。