这个查询如何在sql server中工作

时间:2015-03-31 06:05:15

标签: sql-server

我正在使用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>

你能告诉我它做了什么,是否删除了其他节点?

我无法理解这一点。

4 个答案:

答案 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 datatypequery 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/

http://www.mssqltips.com/sqlservertip/2899/importing-and-processing-data-from-xml-files-into-sql-server-tables/