如何从选择列表的表列中获取xml属性值

问题描述 投票:-1回答:2
DECLARE @xml AS XML
SET @xml = CONVERT(xml,'<data><UserType userID="123">employee</UserType></data>')  
  SELECT   (SELECT d.value('@userID', 'int')   
       FROM  @xml.nodes('//data/UserType') T(d)) 

我有一个表,其中的列类似于上面的XML。是否可以在select语句中获取@userID值?

在“我的用户”表中,“ XmlData”列的类型为XML。

SELECT
    userID -- u.XmlData

FROM Users u

如何在select语句中从xml中获取userID属性?我知道如何解析一次,但是无法进行选择。

sql-server xml
2个回答
0
投票

您将它们与APPLY编织在一起。类似于:

SELECT
    u.*,
    SELECT T.d.value('@userID', 'int') userID 
FROM Users u
CROSS APPLY u.XmlData.nodes('/data/UserType') T(d) 

0
投票

稍微扭曲。

示例

Declare @YourTable table (ID int,XMLData nvarchar(max))
Insert Into @YourTable values
(1,'<data><UserType userID="123">employee</UserType></data>')

Select A.ID
      ,C.*
 From  @YourTable A
 Cross Apply ( values (convert(XML,XMLData) )) B(XData)
 Cross Apply ( Select UserID = d.value('@userID', 'int')   
                 From XData.nodes('/data/UserType') T(d)
             ) C

返回

ID  UserID
1   123
© www.soinside.com 2019 - 2024. All rights reserved.