sql-server - SQL Server 2008 中的 XML 数据类型 - 查找以 "name"开头的所有属性的值

标签 sql-server xml

我的 xml 数据为:

<data>
    <x name="name0">val1</x>
    <x name="name1">val2</x>
    <x name="name2">val3</x>
    <x name="name3">val4</x>
</data>

如何形成一个选择查询来获取属性名称以“name”开头,后跟 0、1、2、3 等的值?

最佳答案

你有两种方法

DECLARE @xml XML=
'<data>
    <x name="name0">val1</x>
    <x name="name1">val2</x>
    <x name="name2">val3</x>
    <x name="other">val other</x>
    <x name="name3">val4</x>
</data>';

--这将读取所有节点并使用经典的WHERE

WITH CTE AS
(
    SELECT x.value('@name','nvarchar(max)') AS x_name
          ,x.value('.','nvarchar(max)') AS x_value
    FROM @xml.nodes('/data/x') AS A(x)
)
SELECT x_value
FROM CTE
WHERE x_name LIKE 'name%';

--这是纯粹的XQuery

SELECT x.value('.','nvarchar(max)') AS x_value
FROM @xml.nodes('/data/x[substring(@name,1,4)="name"]') AS A(x)

更新

如果您需要动态地使用“name”一词,可以使用sql:variable("@VarName")

DECLARE @part NVARCHAR(100)='name';
SELECT x.value('.','nvarchar(max)') AS x_value
FROM @xml.nodes('/data/x[substring(@name,1,4)=sql:variable("@part")]') AS A(x)

两个查询将返回相同的结果(val other 被过滤掉):

val1
val2
val3
val4

关于sql-server - SQL Server 2008 中的 XML 数据类型 - 查找以 "name"开头的所有属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41889433/

相关文章:

xml - 如何为复合类型创建模式?

xml - 如何查明属性是否存在于 XSL 中

sql-server - SQL Server 管理工作室 2008 : save database diagrams without applying tables just yet

sql - 如何在SQL Server数据库中添加自动增量主键?

java - 如何使用 JDBC 连接到 SQL Server

c# - Log4Net 不写入数据库

sql-server - 编写日志传送自动化脚本

java - 在 Java 中清理错误的 XML

java - Spring Integration xml 到 java dsl - 如何定义入站/出站 channel 适配器、轮询器等

java - 扩展 Hello World 教程