我正在使用SQL Server 2012.这是一个我不明白的查询:
declare @tempDoc xml
set @tempDoc = '<Root>
<ProductDescription ProductID="1" ProductName="Hovercraft">
<Features>
<Passengers>60 passenger capacity</Passengers>
<Performance>Top speed: 200 KMPH</Performance>
<Maintenance>5 year parts and labor extended maintenance </Maintenance>
</Features>
</ProductDescription>
</Root>';
SELECT @tempDoc.query('/Root/ProductDescription/Features/Passengers');
选择返回:
<Passengers>60 passenger capacity</Passengers>
你能告诉我它做了什么,是否删除了其他节点?
我无法理解这一点。
答案 0 :(得分:1)
从存储在变量@tempDoc
中的xml中选择Passenger-node。
您在查询中拥有确切的“位置”:Root -> ProductDescription -> Features -> Passengers
。
非常直接而且不,它不会删除其余部分。该变量仍包含完整的xml
,但您已选择仅检索passengers-node
。
您可以在此处详细了解XQuery language
,例如:
https://msdn.microsoft.com/en-us/library/ms189075.aspx
要查询存储在xml类型的变量或列中的XML实例,请使用xml数据类型方法。例如,您可以声明xml类型的变量,并使用xml数据类型的query()方法对其进行查询。
答案 1 :(得分:0)
查询方法从tempDoc变量中找到的指定路径输出乘客节点。
查看xml datatype和query method的msdn文档。
答案 2 :(得分:0)
query()
中的XQuery
方法从XML
中提取值,并且不会从原始数据中删除节点。
来自technet,
query()方法采用计算结果为a的XQuery表达式 XML节点列表,允许用户提取XML片段 文献。此方法的结果是无类型XML的实例。
答案 3 :(得分:0)
这很简单,它提取你在参数中给出的值。如果您在c#中使用xml并想要提取节点值。
在SQL Server中也做了同样的事情。您只需使用XQuery
并给出树的路径意味着提取值的节点路径。您将在xml,读取值,读取节点,读取属性或属性,将xml解析为表等方面做很多事情。
http://blog.sqlauthority.com/2009/02/13/sql-server-simple-example-of-reading-xml-file-using-t-sql/
https://www.simple-talk.com/sql/database-administration/manipulating-xml-data-in-sql-server/