使用函数 OPENROWSET 读取xml文件。
函数 OPENROWSET 中,通过使用 SINGLE_BLOB,可以避免 XML 文档的编码(由 XML 编码声明所指定)与服务器隐含使用的字符串代码页不匹配的问题。
实例1:
SELECT * FROM OPENROWSET (
BULK ' c:SampleFolderSampleData3.txt ' , SINGLE_BLOB) AS x
idoc
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )
[ WITH ( SchemaDeclaration | TableName ) ]
XML 文档的内部表式形式的文档句柄。通过调用 sp_xml_preparedocument 创建 XML 文档的内部表式形式。
XPath 模式,用来标识要作为行处理的节点(这些节点在 XML 文档中,该文档的句柄由 idoc 参数传递)。
flags指示应在 XML 数据和关系行集间使用映射以及应如何填充溢出列。flags 为可选输入参数,可以是下列值之一:
0 | 默认为“以属性为中心”的映射。 |
1 | 使用“以属性为中心”的映射。可以与 XML_ELEMENTS 一起使用。这种情况下,首先应用“以属性为中心”的映射,然后对所有未处理的列应用“以元素为中心”的映射。 |
2 | 使用“以元素为中心”的映射。可以与 XML_ATTRIBUTES 一起使用。这种情况下,首先应用“以属性为中心”的映射,然后对所有未处理的列应用“以元素为中心”的映射。 |
8 | 可与 XML_ATTRIBUTES 或 XML_ELEMENTS 组合使用(逻辑或)。在检索的上下文中,该标志指示不应将已使用的数据复制到溢出属性 @mp:xmltext。 |
-
SchemaDeclaration
-
窗体的架构定义:ColName ColType [ColPattern | MetaProperty] [, ColNameColType [ColPattern | MetaProperty]...]
-
ColName
-
行集中的列名。
-
ColType
-
行集中列的 SQL Server 数据类型。如果列类型不同于属性的基础 xml 数据类型,则将发生类型强制。
-
ColPattern
-
可选的通用 XPath 模式,它说明应如何将 XML 节点映射到列。如果没有指定 ColPattern,则发生默认映射(由 flags 指定的“以属性为中心”或“以元素为中心”的映射)。
指定为 ColPattern 的 XPath 模式用于指定特殊的映射性质(如果发生“以属性为中心”和“以元素为中心”的映射),这些特殊的映射性质可以重写或增强由 flags 所指示的默认映射。
指定为 ColPattern 的通用 XPath 模式也支持元属性。
-
MetaProperty
-
由 OPENXML 提供的元属性之一。如果指定 MetaProperty,则该列包含元属性提供的信息。使用元属性可以提取有关 XML 节点的信息(如相对位置和命名空间信息)。它提供了比文本表示形式更详细的信息。
-
-
TableName
-
如果具有所需架构的表已经存在且不要求列模式,则为给定的表名(而不是 SchemaDeclaration)。
实例2:
SELECT * into #temp1 FROM OPENROWSET (
BULK ' D:80000015.xml ' ,SINGLE_BLOB ) AS x
DECLARE @hdoc int
DECLARE @doc xml
select @doc = BulkColumn from #temp1
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
SELECT * into #temp2
FROM OPENXML ( @hdoc , ' /AA/BB ' , 2 )
with (A varchar ( 50 ),B varchar ( 50 ),C varchar ( 50 ))
exec sp_xml_removedocument @hdoc