sql-server - XML 数据类型方法“值”返回 XQuery 而不是值
问题描述
简化示例:
DECLARE @xml AS XML
SET @xml='
<utmVisit>
<utmSource>cpa1</utmSource>
</utmVisit>'
DECLARE @utmType NVARCHAR(255) = 'utmSource[1]'
SELECT c.value('utmSource[1]', 'nvarchar(255)')
FROM @xml.nodes('//utmVisit') T(c)
SELECT c.value('sql:variable("@utmType")', 'nvarchar(255)')
FROM @xml.nodes('//utmVisit') T(c)
第一个选择给我们“cpa1”,这是我们想要的值。
第二个给出“utmSource [1]”,这是@utmType 本身的值。
所以我希望得到“cpa1”但得到“utmSource [1]”。
我不能动态构建 XQuery 吗?
解决方案
如 Microsoft 官方文档中所述:
value (XQuery, SQLType)
论据
XQuery 是 XQuery 表达式,一个字符串文字,用于检索 XML 实例内的数据。XQuery 最多只能返回一个值。否则,返回错误。
所以它期待一个文字字符串。
尽管您可以使用可能是动态的 XPath 谓词表达式。例如,使用 T-SQL 变量等。
SQL
DECLARE @xml AS XML =
'<utmVisit>
<utmSource>cpa1</utmSource>
</utmVisit>';
DECLARE @utmType NVARCHAR(255) = 'utmSource';
SELECT c.value('(utmSource/text())[1]', 'nvarchar(255)')
FROM @xml.nodes('//utmVisit') T(c);
SELECT c.value('(*[local-name(.) = sql:variable("@utmType")]/text())[1]', 'nvarchar(255)')
FROM @xml.nodes('//utmVisit') T(c);
推荐阅读
- css - Nativescript 中的 Font Awesome Pro
- .net - 使用 .NET 驱动程序将新文档添加到 MongDB 上的某个集合时如何获得通知?
- excel - 分组在同类群组中的数据集中唯一出现的计数
- vue.js - Vuejs2 - 如何从服务器更新整个对象而不失去反应性?
- php - 在 VPS 上部署 Laravel 应用程序时出现“内部服务器错误”
- python - Django 日期范围与 postgres 字段
- python - 如何在sklearn cross_validate函数的评分属性中传递参数?
- mongodb - 嵌入重复的“友谊”子文档来模拟 MongoDB 中的相互友谊边缘
- python - 在 pytest_runtest_logreport 中访问 pytest 会话或参数
- c# - 如何解决参数超出范围异常