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属性?我知道如何解析一次,但是无法进行选择。
您将它们与APPLY编织在一起。类似于:
SELECT
u.*,
SELECT T.d.value('@userID', 'int') userID
FROM Users u
CROSS APPLY u.XmlData.nodes('/data/UserType') T(d)
稍微扭曲。
示例
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