将XML数据批量插入SQL Server 2005数据库的最佳方法
发布时间:2020-12-15 23:54:21 所属栏目:百科 来源:网络整理
导读:我必须将大约25-30个 XML分解为我的SQL Server 2005数据库(总大小约为10 MB).一旦将新的xml文件复制到服务器,我就需要这个逻辑自动运行. 我已阅读本网站和其他网站上的很多帖子,但仍不能总结我必须使用什么来粉碎数据. 请让我知道我应该选择哪个选项 SqlBulk
我必须将大约25-30个
XML分解为我的SQL Server 2005数据库(总大小约为10 MB).一旦将新的xml文件复制到服务器,我就需要这个逻辑自动运行.
我已阅读本网站和其他网站上的很多帖子,但仍不能总结我必须使用什么来粉碎数据. 请让我知道我应该选择哪个选项 > SqlBulk复制 我必须为我的数据模型创建C#类.所以C#反序列化是我的第一选择. 我忘了提到的另一件事是XML文件的结构会有所不同.它不会是一样的.我将拥有将包含可能填充的所有列的表.但xmls不会始终拥有所有数据. 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> 谢谢.
鉴于您在SQL变量中拥有XML,您可以使用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]',ListingAgentName = EstL.value('(listingAgent/name)[1]','varchar(50)'),ListingAgentTel = EstL.value('(listingAgent/telephone)[1]',ListingAgentEMail = EstL.value('(listingAgent/email)[1]','varchar(250)'),[Description] = EstL.value('(description)[1]',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) 你应该得到: 这些数据可以很容易地插入表格中.此查询可以使用相当简单的SSIS包(枚举XML,将每个XML加载到SQL变量,解析它,将数据插入表等)对磁盘上的任意数量的XML文件运行. 但是:具有挑战性的部分将是如下问题: >可以有多个上市代理商吗?如果是的话:如何处理? 等等…. 更新:这里的查询将提取UniqueID并且每个完整的< img>标记来自该XML输入的信息并显示它(或将其插入另一个表中): SELECT UniqueID = @input.value('(/estateList/uniqueID)[1]',ImageID = Images.value('(img/@id)[1]',ImageModTime = Images.value('(img/@modTime)[1]',ImageFormat = Images.value('(img/@format)[1]',ImageURL = Images.value('(img/@url)[1]','varchar(250)') FROM @input.nodes('/estateList/address/ImagesContainer') AS Tbl(Images) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |