【问题标题】:Importing and validating XML file using SSIS or just plain T-SQL?使用 SSIS 或纯 T-SQL 导入和验证 XML 文件?
【发布时间】: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有什么性能差异。


请注意,其他一些要求是:

  1. 错误处理:如果出现错误,必须向某人发送电子邮件。
  2. 能够处理具有特定文件名模式的多个输入文件:XML_{date}_{time}.xml
  3. 将处理后的 XML 文件移至其他文件夹。

请指教。

【问题讨论】:

  • SSIS 是一个可视化工具,允许 SQL 受损者执行简单的任务。如果你会写 T-SQL,SSIS 只会妨碍你。
  • @Andomar 显然不理解 SSIS,如果他这样描述的话。对于每个人来说——如果你更熟悉或更喜欢 T-SQL——那就使用它。 SSIS 的 XML 源是有限的,但如果它在你的情况下工作,并且你已经完成了它,那么只要性能相当,我就会使用它。我希望 T-SQL 执行得更快,但 SSIS 无疑比 T-SQL 具有更好的错误处理能力。

标签: sql xml ssis xsd


【解决方案1】:

根据您提到的要求,我想说您可以使用两全其美(T-SQL 和 SSIS)。

我觉得 T-SQL 在加载您在问题中描述的 XML 数据方面提供了更大的灵活性。

有很多不同的方法可以实现这一目标。这是一种可能的选择:

  1. 创建一个将 XML 文件的路径作为输入参数的存储过程。

  2. 使用您认为更容易的 T-SQL 方式执行 XML 数据加载操作。

  3. 使用 SSIS 包执行错误处理、文件处理、归档和发送电子邮件。

  4. 使用 SSIS 中可用的日志记录功能。它只需要简单的配置。这是一个示例,展示了如何在 SSIS How to track status of rows successfully processed or failed in SSIS data flow task? 中配置日志记录

  5. 您的流程的示例模型将如下面的屏幕截图所示。使用 Foreach 循环容器循环文件。将文件路径作为参数传递给执行 SQL 任务,这反过来会调用您提到的 T-SQL。处理完文件后,使用文件系统任务将文件移动到存档文件夹。

  6. SSIS reading multiple xml files from folder 中使用的示例 展示了如何使用 Foreach 循环容器循环文件。它循环遍历 xml 文件,但使用数据流任务,因为 xml 文件格式更简单。

  7. How to send the records from a table in an e-mail body using SSIS package? 中使用的示例显示了如何使用发送邮件任务发送电子邮件。

  8. How do I move files to an archive folder after the files have been processed? 中使用的示例显示了如何将文件移动到存档文件夹。

  9. Branching after a file system task in SSIS without failing the package 中使用的示例显示了即使在特定任务失败后如何继续执行包。即使 Foreach 循环失败,这也将帮助您继续执行包,以便您可以发送电子邮件。屏幕截图中的蓝色箭头表示已完成上一个任务。

  10. How do I pick the most recently created folder using Foreach loop container in SSIS package? 中使用的示例显示了如何执行模式匹配。

希望能给你一个想法。

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    相关资源
    最近更新 更多