针对 xml 数据类型的 XQuery 运算符
适用于:SQL Server
XQuery 支持下列运算符:
数字运算符(+、-、*、div、mod)
值比较运算符(eq、ne、lt、gt、le、ge)
用于常规比较的运算符 ( =、 !=、 <、 >、 <= = >)
有关这些运算符的详细信息,请参阅 比较表达式 (XQuery)
示例
A. 使用一般运算符
此查询说明了应用于序列和比较序列的一般运算符的使用方法。 该查询从 Contact 表的 AdditionalContactInfo 列中检索每个客户的电话号码序列。 然后,将这个序列与两个电话号码(“111-111-1111”、“222-2222”)序列进行比较。
查询使用 = 比较运算符。 将运算符右侧 = 序列中的每个节点与左侧序列中的每个节点进行比较。 如果节点匹配,则节点比较为 TRUE。 然后将其转换为整数并与 1 进行比较,然后查询将返回客户 ID。
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)
SELECT ContactID
FROM Person.Contact
WHERE AdditionalContactInfo.value('
//ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =
("111-111-1111", "222-2222")',
'bit')= cast(1 as bit)
还有另一种方法可以观察上一个查询的工作原理:从 AdditionalContactInfo 列检索到的每个电话号码值都与两个电话号码集进行比较。 如果该值处于集中,则该客户将返回到结果中。
B. 使用数字运算符
此查询中的运算符 + 是一个值运算符,因为它应用于单个项。 例如,将值 1 添加到查询返回的许多大小值上:
SELECT ProductModelID, Instructions.query('
declare namespace
AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $i in (/AWMI:root/AWMI:Location)[1]
return
<Location LocationID="{ ($i/@LocationID) }"
LotSize = "{ number($i/@LotSize) }"
LotSize2 = "{ number($i/@LotSize) + 1 }"
LotSize3 = "{ number($i/@LotSize) + 2 }" >
</Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7
C. 使用值运算符
以下查询检索 <Picture
> 图片大小为“小”的产品模型的元素:
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]
return
$P
') as Result
FROM Production.ProductModel
where ProductModelID=19
由于 eq 运算符的操作数都是原子值,因此在查询中使用值运算符。 可以使用常规比较运算符 ( = ) 编写相同的查询。
另请参阅
针对 xml 数据类型的 XQuery 函数
XML 数据 (SQL Server)
Xquery 语言参考 (SQL Server)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈