sql-server - 使用 OPENROWSET 和 OPENXML 将 XML 导入 SQL Server

标签 sql-server xml openxml openrowset

以前从未这样做过,似乎命名空间有问题?任何帮助,将不胜感激。如果我从 XML 文件中删除 xmlns 属性,它就可以正常工作...

示例 XML:

<?xml version="1.0" encoding="UTF-8"?>
<ETS xsi:schemaLocation="http://www.caodc.ca/ETS/v3 ETS_v3.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.caodc.ca/ETS/v3">
<WellTours>
<WellTour>
<LicenseNo>001</LicenseNo>
<WellName>75-998</WellName>
</WellTour>
<WellTour>
<LicenseNo>007</LicenseNo>
<WellName>14-172</WellName>
</WellTour>
</WellTours>
</ETS>

这是我的 SQL:

DECLARE @xml xml

SELECT @xml=I
FROM OPENROWSET (BULK 'C:\CCTESTFILE.XML', SINGLE_BLOB) as ImportFile(I)

SELECT @xml

DECLARE @hdoc int

EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml

SELECT *
FROM OPENXML (@hdoc, '/ETS/WellTours/WellTour',2)
WITH (
        WellName varchar(100),
        LicenseNo varchar(100));

EXEC sp_xml_removedocument @hdoc

最佳答案

使用内置的 XQuery 功能而不是旧的、笨重且内存泄漏的 OPENXML 方法要简单得多:

;WITH XMLNAMESPACES(DEFAULT 'http://www.caodc.ca/ETS/v3')
SELECT
    LicenseNo = XC.value('(LicenseNo)[1]', 'varchar(10)'),
    WellName = XC.value('(WellName)[1]', 'varchar(25)')
FROM
    @xml.nodes('/ETS/WellTours/WellTour') AS XT(XC)

给我一​​个输出:

enter image description here

关于sql-server - 使用 OPENROWSET 和 OPENXML 将 XML 导入 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39085876/

相关文章:

sql - 如何将一列分成两列并按 id 分组

c# - 使用 .Net 将字符串转换为 XML

c# - 将数字添加到图表的轴

SQL 计数列和列表值计数

sql-server - 如何获取字符串sql中某些字符之后的所有字符

sql-server - 如何在同一环境中的 Rails 中使用 2 个不同的数据库适配器(SQL Server 和 PostgreSQL)?

android - 在 Android XML 文件(Eclipse)中获得自动完成/提前输入/智能感知的任何可能性

c# - XML 序列化 - 大数据(20GB),OutOfMemoryException

c# - 使用 AltChunks 合并的文档的内部文本为空

c# - 打开 XML SDK : Format part of an Excel-cell