首页 > 解决方案 > T-SQL XML - 存在任何元素

问题描述

我需要找出元素下是否存在任何 xml 元素。实体下可能有多个元素或没有元素。以下是输入 xml 的示例(为了便于阅读,删除了版本)

declare @xml xml= '<entity name="User" />'
declare @xml xml= '<entity name="User"> <email>s@s.com</email></entity>
declare @xml xml= '<entity name="User"> <admin>1</admin></entity>

select IsExists = ISNULL(@xml.value('(entity/text())[1]','VARCHAR(max)'), 'N')

我正在尝试使用价值并尝试提取文本。但它似乎不起作用。任何帮助或建议。

标签: sql-servertsql

解决方案


也许这就是你的想法。

declare @xml1 xml= '<entity name="User" />'
declare @xml2 xml= '<entity name="User"><email>s@s.com</email><email>t@s.com</email></entity>'
declare @xml3 xml= '<entity name="User"><admin>1</admin></entity>'

select @xml1.exist('entity/*') as [xml1?], 
    @xml2.exist('entity/*') as [xml2?], 
    @xml3.exist('entity/*') as [xml3?]

xml1? xml2? xml3?
----- ----- -----
0     1     1

如果你想要所有元素的文本。

select CAST(@xml1.query('entity/*') as varchar(20)) as [text1], 
    CAST(@xml2.query('entity/*') as varchar(45)) as [text2], 
    CAST(@xml3.query('entity/*') as varchar(20)) as [text3]

text1                text2                                         text3
-------------------- --------------------------------------------- --------------------
                     <email>s@s.com</email><email>t@s.com</email>  <admin>1</admin>


推荐阅读