如何在没有节点的情况下从 XML 查询值?

How to query values from XML without nodes?

我有一个 XML 这样的:

<User LoginName="yes" Signature="A" MobilePhone="yes" />

我使用以下查询:

SELECT field.value('/User[@LoginName=1][1]','varchar(max)') 
FROM table

我希望 LoginName 的输出是 "yes"

您可以使用以下查询来获得预期结果:

SELECT R.V.value('@LoginName[1]', 'varchar(max)') AS LoginValue
FROM   TestTable AS T
OUTER APPLY T.data.nodes('User[1]') as R(V)

使用一些数据执行示例:

DECLARE @TestTable TABLE (data XML);

INSERT INTO @TestTable (data) VALUES
('<User LoginName="yes" Signature="A" MobilePhone="yes" />
<User LoginName="no" Signature="B" MobilePhone="NA" />');

SELECT R.V.value('@LoginName[1]', 'varchar(max)') AS LoginValue
FROM   @TestTable AS T
OUTER APPLY T.data.nodes('User[1]') as R(V)

结果为

LoginValue
----------
yes

请找到working demo on db<>fiddle