如果在 SQL 中选择 XML 节点
If condition on Selecting XML node in SQL
我正在尝试读取 xml 并将其存储在 SQL 服务器中。
DECLARE @xml XML
SET @xml =
'<report>
<personal>
<search>
<subject>
<name>SearchName</name>
</subject>
</search>
</personal>
<personal>
<search>
<subject>
<name>SearchName</name>
</subject>
</search>
<result>
<history>
<name>HistoryName</name>
</history>
</result>
</personal>
</report>
'
我在这里尝试的是 - select输入名称,但这里的条件是
如果 <personal>
包含 <result>
那么 select name
在 history/name
下
if <personal>
不包含 <result>
select subject/name
下的 name
目前我正在select从personal/subject中输入名字如下:
Select
A.Search.value('(subject/name)[1]','varchar(max)')
FROM @xml.nodes('/report/personal/search') as A(Search)
预期结果:
SearchName
HistoryName
如何在两者之间添加条件?
有什么办法可以在这里添加存在条件
SELECT @xml.exist('//report//personal//search//subject//name')
Select coalesce(A.Search.value('(result/history/name)[1]', 'varchar(max)'), A.Search.value('(search/subject/name)[1]','varchar(max)'))
FROM @xml.nodes('/report/personal') as A(Search)
这个:
SELECT
COALESCE(
A.Search.value('(result/history/name)[1]','varchar(max)'),
A.Search.value('(search/subject/name)[1]','varchar(max)')
) AS Name
FROM @xml.nodes('/report/personal') as A(Search)
将return:
Name
------------
SearchName
HistoryName
我正在尝试读取 xml 并将其存储在 SQL 服务器中。
DECLARE @xml XML
SET @xml =
'<report>
<personal>
<search>
<subject>
<name>SearchName</name>
</subject>
</search>
</personal>
<personal>
<search>
<subject>
<name>SearchName</name>
</subject>
</search>
<result>
<history>
<name>HistoryName</name>
</history>
</result>
</personal>
</report>
'
我在这里尝试的是 - select输入名称,但这里的条件是
如果 <personal>
包含 <result>
那么 select name
在 history/name
if <personal>
不包含 <result>
select subject/name
name
目前我正在select从personal/subject中输入名字如下:
Select
A.Search.value('(subject/name)[1]','varchar(max)')
FROM @xml.nodes('/report/personal/search') as A(Search)
预期结果:
SearchName
HistoryName
如何在两者之间添加条件?
有什么办法可以在这里添加存在条件
SELECT @xml.exist('//report//personal//search//subject//name')
Select coalesce(A.Search.value('(result/history/name)[1]', 'varchar(max)'), A.Search.value('(search/subject/name)[1]','varchar(max)'))
FROM @xml.nodes('/report/personal') as A(Search)
这个:
SELECT
COALESCE(
A.Search.value('(result/history/name)[1]','varchar(max)'),
A.Search.value('(search/subject/name)[1]','varchar(max)')
) AS Name
FROM @xml.nodes('/report/personal') as A(Search)
将return:
Name
------------
SearchName
HistoryName