I have two tables tblUser and tblUserPermissions and I need all the permission elements from the below xml column (XmlData) for each user in tblUser. There is only one userid element in each XmlData.
<User xmlns="">
<userid>user1</userid>
<permissions>
<permission>per1</permission>
<permission>per2</permission>
<permission>per3</permission>
</permissions>
//Other elements here
</User>
I am trying this query.
SELECT u.UserID, UserPermissions.perm.value('permission', 'varchar(50)')
FROM tblUserPermissions up WITH (NOLOCK)
INNER JOIN tblUser u ON u.UserID = up.XmlData.value('(/User/userid)[1]', 'int')
cross apply up.XmlData.nodes('/User/permissions') AS UserPermissions (perm)
How can I get the result as shown below?
UserID | Permission
user1 | per1
user1 | per2
user1 | per3
user2 | per1
user2 | per2
user3 | per1
user3 | per2
user3 | per3
I get an error as below. Any idea what needs to be changed in my query? Thanks for any suggestions!
XQuery [tblVORRequest.RequestXml.value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'