sql-server - 变量附近的语法错误,预期循环中的步骤表达式(XQuery,SQL Server)
问题描述
DECLARE @x xml =
'<A>
<B name="235">
<A1>
<C id="1.1"/>
<D id="1.2" />
</A1>
</B>
<B name="535">
<A1>
<C id="2.1"/>
<D id="2.2" />
</A1>
</B>
</A>'
我想为 4 级(C,D)上的每个标签获取祖先 B(idB)的属性值。
例如:
<node tag="C">
<id>1.1</id>
<idB>235</idB>
</node>
<node tag="D">
<id>1.2</id>
<idB>235</idB>
</node>
<node tag="C">
<id>2.1</id>
<idB>535</idB>
</node>
<node tag="D">
<id>2.2</id>
<idB>535</idB>
</node>
我在 SQL Server 中使用 XQuery:
SELECT @x.query('for $b in /A/B/A1/*
return
<node tag="{local-name($b)}">
<id>{data($b/@*[1])}</id>
<idB>{data(//logu[.//$b]/@*[1])}</idB>
</node>
')
但我得到一个错误;
“$b”附近的语法错误,需要一个步骤表达式
解决方案
请尝试以下 XQuery。
SQL
DECLARE @x xml =
N'<A>
<B name="235">
<A1>
<C id="1.1"/>
<D id="1.2" />
</A1>
</B>
<B name="535">
<A1>
<C id="2.1"/>
<D id="2.2" />
</A1>
</B>
</A>';
SELECT @x.query('
for $b in /A/B/A1/*
return <node tag="{local-name($b)}">
<id>{data($b/@*[1])}</id>
<idB>{data($b/../../@name)}</idB>
</node>
');
输出
<node tag="C">
<id>1.1</id>
<idB>235</idB>
</node>
<node tag="D">
<id>1.2</id>
<idB>235</idB>
</node>
<node tag="C">
<id>2.1</id>
<idB>535</idB>
</node>
<node tag="D">
<id>2.2</id>
<idB>535</idB>
</node>
推荐阅读
- rust - 更新/重新初始化在lazy_static中定义的变量
- javascript - 如何以参数方式将 json 正文中的字段发送到节点 js api?
- websocket - AWS APIGateway WebSockets API 返回 429
- sqlite - 使用 Centos7 的 SQlite 二进制文件升级 Python SQlite3 模块(本地机器)
- google-drive-api - 使用 Soup (Vala) 在 Google Drive API 中获取错误“可能正在发送自动查询”
- html - 如何在html按钮中将图标左对齐和文本居中?
- docker - 从另一个容器连接到 docker-container 中的 RabbitMQ
- .net - Power BI Embedded,使用证书获取身份验证令牌时出现问题 - 出现错误“无效的提供程序类型”
- java - 使用 IN & MEMBER OF 子句通过 JPQL 获取数据时,操作数应包含 2 列
- amazon-web-services - AWS Code Deploy 部署失败“ScriptFailed”