Sql XML返回检查多个节点的值
这是我的xmlSql XML返回检查多个节点的值,sql,sql-server,xml,xpath,Sql,Sql Server,Xml,Xpath,这是我的xml <Configuration> <Name>EscalatedSubscribers</Name> <Role>Configuration</Role> <UISettings> <Control> <Name>SubscriberSelector</Name> <Type>Configurat
<Configuration>
<Name>EscalatedSubscribers</Name>
<Role>Configuration</Role>
<UISettings>
<Control>
<Name>SubscriberSelector</Name>
<Type>Configuration</Type>
<DisplayItem>Workspaces</DisplayItem>
</Control>
</UISettings>
<Values>
<Required>
<Name Type="WS">ganderson</Name>
<Name Type="WS">mhoffmann</Name>
<Name Type="WS">lmcswain</Name>
<Name Type="WS">jbranham</Name>
<Name Type="WS">gsimpson</Name>
<Name Type="WS">jbennett</Name>
<Name Type="WS">bdrum</Name>
<Name Type="WS">mtrott</Name>
<Name Type="WS">acannon</Name>
<Name Type="WS">dgantt</Name>
<Name Type="WS">evalone</Name>
<Name Type="WS">flyons</Name>
<Name Type="WS">saheavner</Name>
</Required>
</Values>
</Configuration>
返回所需的完整节点,我正在检查该节点是否与“%ganderson%”类似
SELECT p.Tag.value('(/Configuration/Values/Required[1]','varchar(max)') as varchar(max) )
返回第一个用户,即ganderson,但这只是因为我运气好。必须有一种更有效的方法来做到这一点。您可以通过变量或从列检查xml列中是否存在此名称 首先,我创建了表并添加了一些数据(使用了您为xmlData列编写的相同xml): 结果:
<Name Type="WS">evalone</Name>
<Name Type="WS">lmcswain</Name>
结果:
<Name Type="WS">jbranham</Name>
<Name Type="WS">jbranham</Name>
<Name Type="WS">jbranham</Name>
jbranham
杰布拉纳姆
杰布拉纳姆
首先使用
exists
()检查Name
节点中是否存在搜索到的text()
,然后使用query
获取该节点。我想我的问题是,哪里有text()=sql:variable(),我还有什么其他选项。我试图从另一个表中提取一列。因此,正如您所看到的,您也可以使用sql:column(“name”)
SELECT xmldata.query('(/Configuration/Values/Required/Name[text()=sql:column("name")])')
FROM @xmlTable
WHERE xmldata.exist('/Configuration/Values/Required/Name[text()=sql:column("name")]') = 1
<Name Type="WS">evalone</Name>
<Name Type="WS">lmcswain</Name>
DECLARE @id VARCHAR(200) = 'jbranham';
SELECT xmldata.query('(/Configuration/Values/Required/Name[text()=sql:variable("@id")])')
FROM @xmlTable
WHERE xmldata.exist('/Configuration/Values/Required/Name[text()=sql:variable("@id")]') = 1
<Name Type="WS">jbranham</Name>
<Name Type="WS">jbranham</Name>
<Name Type="WS">jbranham</Name>