我有一个带有 XML 列的表,其中一些元素是可选的。在这个(非常)简化的示例中,代码在所有元素都存在时有效,但如果一个或多个不存在,我什么也得不到。(即零行而不是 1,其中 Y 为空)
我通过各种搜索获得了这种技术,所以肯定有更好的方法。最终,我希望这是一个观点(如果这对方法很重要),但我应该能够弄清楚这一点。
declare @x XML = '<Root><A x="1"><B ySameName="2"/><C ySameName="3"/></A></Root>';
--declare @x XML = '<Root><A x="1"><C ySameName="3"/></A></Root>';
select EA.*, EB.*, EC.* from
(select c.node.value('@x', 'int') as X
from @x.nodes('//Root/A') AS c(node)) EA
,(select c.node.value('@ySameName', 'int') as YB
from @x.nodes('//Root/A/B') AS c(node)) EB
,(select c.node.value('@ySameName', 'int') as YC
from @x.nodes('//Root/A/C') AS c(node)) EC;
我可以使用本地变量执行 3 次选择,然后返回所有变量 - 但这看起来很笨重,我不确定如何使用这种方法进行查看。
感谢:D