gpt4 book ai didi

xml - 将 XML 数据批量插入 SQL Server 2005 数据库的最佳方式

转载 作者:数据小太阳 更新时间:2023-10-29 01:57:30 25 4
gpt4 key购买 nike

我必须将大约 25 - 30 个 XML 分解到我的 SQL Server 2005 数据库中(总大小约为 10 MB)。我需要这个逻辑在新的 xml 文件复制到服务器后立即自动运行。

我阅读了本网站和其他网站上的许多帖子,但仍不能确定我必须使用什么来粉碎数据。

请让我知道我应该选择哪个选项

  1. Sql批量复制
  2. C#反序列化
  3. SSIS

我必须为我的数据模型创建 C# 类。所以C#反序列化是我的第一选择。但请让我知道从性能角度来看哪个选项是正确的。

我忘记提及的另一件事是 XML 文件的结构会有所不同。它不会是一样的。我将拥有包含可能填充的所有列的表。但是 xml 不会始终拥有所有数据。

xml 示例

<?xml version="1.0" encoding="utf-8"?>
<estateList date="2012-08-06T12:17:05">
<uniqueID>22XXln</uniqueID>
<category name="Apartment" />
<listingAgent>
<name>DIW Office</name>
<telephone type="BH">96232 2345</telephone>
<telephone type="BH">9234 2399</telephone>
<email>abcd@abc.com</email>
</listingAgent>
<inspectionTimes />
<description>AVAILABLE NOW. </description>
<price>0</price>
<address display="yes">
<street>Lachlsan Street</street>
<ImagesContainer>
<img id="m" modTime="2012-08-06-12:17:05" url="http://images/2409802.jpg" format="jpg" />
<img id="a" modTime="2012-08-06-12:17:05" />
</ImagesContainer>
</address>
</estateList>

谢谢。

最佳答案

假设您的 XML 位于 SQL 变量中,您可以使用 SQL Server 2005 中添加的 XQuery 支持直接使用 T-SQL 非常轻松地解析出大部分信息。

尝试这样的事情:

DECLARE @Input XML = '<estateList date="2012-08-06T12:17:05">
<uniqueID>22XXln</uniqueID>
<category name="Apartment" />
<listingAgent>
<name>DIW Office</name>
<telephone type="BH">96232 2345</telephone>
<telephone type="BH">9234 2399</telephone>
<email>abcd@abc.com</email>
</listingAgent>
<inspectionTimes />
<description>AVAILABLE NOW. </description>
<price>0</price>
<address display="yes">
<street>Lachlsan Street</street>
<ImagesContainer>
<img id="m" modTime="2012-08-06-12:17:05" url="http://images/2409802.jpg" format="jpg" />
<img id="a" modTime="2012-08-06-12:17:05" />
</ImagesContainer>
</address>
</estateList>'

SELECT
EstateListDate = EstL.value('@date', 'datetime'),
UniqueID = EstL.value('(uniqueID)[1]', 'varchar(20)'),
Category = EstL.value('(category/@name)[1]', 'varchar(20)'),
ListingAgentName = EstL.value('(listingAgent/name)[1]', 'varchar(50)'),
ListingAgentTel = EstL.value('(listingAgent/telephone)[1]', 'varchar(50)'),
ListingAgentEMail = EstL.value('(listingAgent/email)[1]', 'varchar(250)'),
[Description] = EstL.value('(description)[1]', 'varchar(250)'),
Price = EstL.value('(price)[1]', 'decimal(14,2)'),
DisplayAddress = EstL.value('(address/@display)[1]', 'varchar(10)'),
AddressStreet = EstL.value('(address/street)[1]', 'varchar(100)')
FROM @input.nodes('/estateList') AS Tbl(EstL)

你应该得到:

enter image description here

此数据可以很容易地插入到表格中。这个查询可以针对磁盘上任意数量的 XML 文件运行,使用一个相当简单的 SSIS 包(枚举 XML,将每个文件加载到 SQL 变量中,解析它,将数据插入表中等)

但是:具有挑战性的部分将是以下问题:

  • 可以有多个上市代理人吗?如果是:如何处理?
  • 可以有多个电话号码吗?如何处理?
  • 如何处理每个地址的多张图片

等等....

更新:此处的查询将提取 UniqueID每个完整的 <img>从该 XML 输入中提取标签的信息并显示它(或将其插入到另一个表中):

SELECT
UniqueID = @input.value('(/estateList/uniqueID)[1]', 'varchar(20)'),
ImageID = Images.value('(img/@id)[1]', 'varchar(20)'),
ImageModTime = Images.value('(img/@modTime)[1]', 'varchar(50)'),
ImageFormat = Images.value('(img/@format)[1]', 'varchar(20)'),
ImageURL = Images.value('(img/@url)[1]', 'varchar(250)')
FROM
@input.nodes('/estateList/address/ImagesContainer') AS Tbl(Images)

关于xml - 将 XML 数据批量插入 SQL Server 2005 数据库的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com