SQL 服务器 XML XQuery select where 子句属性
SQL Server XML XQuery select where clause attribute
我有一个table,内容如下
Id | Guid | XmlDefinitionId
1 | 5a0bfc84-13ec-4497-93e0-655e57d4b482 | 1
2 | e28e786b-0856-40b6-8189-0fbd68aa3e45 | 1
并且在另一个 table 中存储了以下 XML 结构:
<ActionActivity DisplayName="DisplayName 1" IsSkipped="False" Id="5a0bfc84-13ec-4497-93e0-655e57d4b482">...</ActionActivity>
<p:Sequence DisplayName="Prerequisites">
<ActionActivity DisplayName="Inner DisplayName 1" IsSkipped="False" Id="e28e786b-0856-40b6-8189-0fbd68aa3e45">...</ActionActivity>
</p:Sequence>
<ActionActivity DisplayName="DisplayName 2" IsSkipped="False" Id="dcc936dd-73c9-43cc-beb4-c636647d4851">...</ActionActivity>
包含XML的table结构如下:
Id | XML
1 | (XML Structure defined above here)
根据 Guid,我想显示显示名称。目前我有以下查询 returns null。后来我想为第一个 table 中的每个 guid 显示显示名称。
SELECT
Workflow
,CAST(Workflow as XML).value('data(//ActionActivity[@Id="73c9-43cc-beb4-c636647d4851"])[1]', 'nvarchar(50)') as displayname
FROM SerializedData
有人想用 sql 查询显示显示名称吗?
假设 XML 存储在 XML 类型的列中,您可以这样做 - 否则您需要将 CAST
列 XML
- :
SELECT
g.guid, x.display_name
FROM GuidTable g
INNER JOIN
(
SELECT
t.id as 'xml_id'
, c.value('@Id', 'varchar(max)') as 'guid'
, c.value('@DisplayName', 'varchar(max)') as 'display_name'
FROM XmlTable t
CROSS APPLY t.xml.nodes('//ActionActivity') as aa(c)
) x on x.guid = g.guid and x.xml_id = g.xmldefinitionid
基本上,上面的查询在 ActionActivity
节点切碎了 XML。然后在 guid
和 xmldefinitionid
列上使用 GuidTable
加入切碎的数据。
输出:
我有一个table,内容如下
Id | Guid | XmlDefinitionId
1 | 5a0bfc84-13ec-4497-93e0-655e57d4b482 | 1
2 | e28e786b-0856-40b6-8189-0fbd68aa3e45 | 1
并且在另一个 table 中存储了以下 XML 结构:
<ActionActivity DisplayName="DisplayName 1" IsSkipped="False" Id="5a0bfc84-13ec-4497-93e0-655e57d4b482">...</ActionActivity>
<p:Sequence DisplayName="Prerequisites">
<ActionActivity DisplayName="Inner DisplayName 1" IsSkipped="False" Id="e28e786b-0856-40b6-8189-0fbd68aa3e45">...</ActionActivity>
</p:Sequence>
<ActionActivity DisplayName="DisplayName 2" IsSkipped="False" Id="dcc936dd-73c9-43cc-beb4-c636647d4851">...</ActionActivity>
包含XML的table结构如下:
Id | XML
1 | (XML Structure defined above here)
根据 Guid,我想显示显示名称。目前我有以下查询 returns null。后来我想为第一个 table 中的每个 guid 显示显示名称。
SELECT
Workflow
,CAST(Workflow as XML).value('data(//ActionActivity[@Id="73c9-43cc-beb4-c636647d4851"])[1]', 'nvarchar(50)') as displayname
FROM SerializedData
有人想用 sql 查询显示显示名称吗?
假设 XML 存储在 XML 类型的列中,您可以这样做 - 否则您需要将 CAST
列 XML
- :
SELECT
g.guid, x.display_name
FROM GuidTable g
INNER JOIN
(
SELECT
t.id as 'xml_id'
, c.value('@Id', 'varchar(max)') as 'guid'
, c.value('@DisplayName', 'varchar(max)') as 'display_name'
FROM XmlTable t
CROSS APPLY t.xml.nodes('//ActionActivity') as aa(c)
) x on x.guid = g.guid and x.xml_id = g.xmldefinitionid
基本上,上面的查询在 ActionActivity
节点切碎了 XML。然后在 guid
和 xmldefinitionid
列上使用 GuidTable
加入切碎的数据。
输出: