如果在 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 namehistory/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