如何使用 SQL .nodes 和 .exist
How to use SQL .nodes AND .exist
我之前问过一个问题,但没有得到任何回复。这是再试一次,让它更简单。对于我的一生,我无法弄清楚如何按照我需要的方式让它工作。假设我有一些 XML:
<aliases>
<alias>
<templateId @root="1" />
<aliasName>Pramod Singh</aliasName>
</alias>
<alias>
<templateId @root="2" />
<aliasName>Bijoy Bora</aliasName>
</alias>
<alias>
<templateId @root="1" />
<aliasName>Testy McTestFace</aliasName>
</alias>
</aliases>
在上面的示例中,我想要 aliasName 但 仅 如果父别名标记具有根值为 1 的 templateId。所以我的预期结果是:
普拉莫德·辛格
Testy McTestFace
我尝试过使用交叉应用@XML.nodes(/aliases/alias) 但无法在所述节点上使用 .exist。我也尝试过使用 @XML.query 但它没有 return 多个实例。必须有一个简单的方法来完成这个,但我就是想不通。
请记住,这是一个非常简单的 XML,我只是想说明我的问题。我正在检索许多值的实际 XML 个文件,每个文件的大小在 1-3 MB 之间。
谢谢!
请尝试以下操作SQL:
DECLARE @xml XML = N'<aliases>
<alias>
<templateId root="1"/>
<aliasName>Pramod Singh</aliasName>
</alias>
<alias>
<templateId root="2"/>
<aliasName>Bijoy Bora</aliasName>
</alias>
<alias>
<templateId root="1"/>
<aliasName>Testy McTestFace</aliasName>
</alias>
</aliases>';
SELECT c.value('(templateId/@root)[1]','INT') AS ARoot
, c.value('(aliasName/text())[1]','VARCHAR(30)') AS AliasName
FROM @xml.nodes('/aliases/alias[templateId/@root=("1","2")]') AS t(c);
我之前问过一个问题,但没有得到任何回复。这是再试一次,让它更简单。对于我的一生,我无法弄清楚如何按照我需要的方式让它工作。假设我有一些 XML:
<aliases>
<alias>
<templateId @root="1" />
<aliasName>Pramod Singh</aliasName>
</alias>
<alias>
<templateId @root="2" />
<aliasName>Bijoy Bora</aliasName>
</alias>
<alias>
<templateId @root="1" />
<aliasName>Testy McTestFace</aliasName>
</alias>
</aliases>
在上面的示例中,我想要 aliasName 但 仅 如果父别名标记具有根值为 1 的 templateId。所以我的预期结果是:
普拉莫德·辛格
Testy McTestFace
我尝试过使用交叉应用@XML.nodes(/aliases/alias) 但无法在所述节点上使用 .exist。我也尝试过使用 @XML.query 但它没有 return 多个实例。必须有一个简单的方法来完成这个,但我就是想不通。
请记住,这是一个非常简单的 XML,我只是想说明我的问题。我正在检索许多值的实际 XML 个文件,每个文件的大小在 1-3 MB 之间。
谢谢!
请尝试以下操作SQL:
DECLARE @xml XML = N'<aliases>
<alias>
<templateId root="1"/>
<aliasName>Pramod Singh</aliasName>
</alias>
<alias>
<templateId root="2"/>
<aliasName>Bijoy Bora</aliasName>
</alias>
<alias>
<templateId root="1"/>
<aliasName>Testy McTestFace</aliasName>
</alias>
</aliases>';
SELECT c.value('(templateId/@root)[1]','INT') AS ARoot
, c.value('(aliasName/text())[1]','VARCHAR(30)') AS AliasName
FROM @xml.nodes('/aliases/alias[templateId/@root=("1","2")]') AS t(c);