SQL XML的查询操作
2011-09-06 09:50 Eric.Hu 阅读(618) 评论(0) 编辑 收藏 举报SQL XML的查询操作
查询XML节点 value:通过nodes 指定到节点通过Value属性取出值
Declare @Xml xml
set @Xml='<Employee><ID>1</ID><ID>2</ID></Employee>'
SELECT ID.value('.','Nvarchar(500)') as EmployeeID
FROM @Xml.nodes('Employee/ID') Employee(ID)
查询 XML节点的属性:
Declare @Xml xml
set @Xml='<Employee><EmployeeID ID="1" /><EmployeeID ID="2" /><EmployeeID ID="3" /></Employee>'
SELECT EmployeeID.value('./@ID','Nvarchar(500)') as ReportColumnID
FROM @Xml.nodes('/Employee/EmployeeID')
X(EmployeeID)
查询XML 多节点的值,可以通过子查询实现:
Declare @Xml xml
Set @Xml = '
<X>
<T><ID>1</ID><NAME>A1</NAME></T>
<T><ID>2</ID><NAME>B2</NAME></T>
<T><ID>3</ID><NAME>C3</NAME></T>
</X>'
SELECT ID.value('.', 'NVARCHAR(100)') As ID,NAME.value('.','NVARCHAR(100)') As NAME
FROM
(
Select
T.C.query('ID') As ID,
T.C.query('NAME') As NAME
From
@Xml.nodes('/X/T') As T(C)
)BT
OPENXML 查询方式:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot" />
</ROOT>'
---创建文档内部格式
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))
OPENXML 查询方式:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order OrderID="10248" CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail ProductID="11" Quantity="12"/>
<OrderDetail ProductID="42" Quantity="10"/>
</Order>
</Customer>
</ROOT>'
---创建文档内部格式
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)
WITH (OrderID int '../@OrderID',
CustomerID varchar(10) '../@CustomerID',
OrderDate datetime '../@OrderDate',
ProdID int '@ProductID',
Declare @Xml xml
set @Xml='<Employee><ID>1</ID><ID>2</ID></Employee>'
SELECT ID.value('.','Nvarchar(500)') as EmployeeID
FROM @Xml.nodes('Employee/ID') Employee(ID)
查询 XML节点的属性:
Declare @Xml xml
set @Xml='<Employee><EmployeeID ID="1" /><EmployeeID ID="2" /><EmployeeID ID="3" /></Employee>'
SELECT EmployeeID.value('./@ID','Nvarchar(500)') as ReportColumnID
FROM @Xml.nodes('/Employee/EmployeeID')
X(EmployeeID)
查询XML 多节点的值,可以通过子查询实现:
Declare @Xml xml
Set @Xml = '
<X>
<T><ID>1</ID><NAME>A1</NAME></T>
<T><ID>2</ID><NAME>B2</NAME></T>
<T><ID>3</ID><NAME>C3</NAME></T>
</X>'
SELECT ID.value('.', 'NVARCHAR(100)') As ID,NAME.value('.','NVARCHAR(100)') As NAME
FROM
(
Select
T.C.query('ID') As ID,
T.C.query('NAME') As NAME
From
@Xml.nodes('/X/T') As T(C)
)BT
OPENXML 查询方式:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot" />
</ROOT>'
---创建文档内部格式
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))
OPENXML 查询方式:
DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order OrderID="10248" CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail ProductID="11" Quantity="12"/>
<OrderDetail ProductID="42" Quantity="10"/>
</Order>
</Customer>
</ROOT>'
---创建文档内部格式
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)
WITH (OrderID int '../@OrderID',
CustomerID varchar(10) '../@CustomerID',
OrderDate datetime '../@OrderDate',
ProdID int '@ProductID',
Qty int '@Quantity')
着意耕耘,自有收获。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器