Reputation: 3366
I need to insert all the RoleTypeID
s(10,9) in the below XML to a table.
I followed the below method. It only inserts the 0th indexed XML entry. How to solve this issue?
DECLARE @ResourcePermissionXML xml = '<ResourcePermission><RoleTypeID>10</RoleTypeID><RoleTypeID>9</RoleTypeID></ResourcePermission>'
DECLARE @ResourcePermissionList AS TABLE(RoleTypeID INT);
INSERT INTO @ResourcePermissionList(RoleTypeID)
SELECT Entries.value('(RoleTypeID)[1]', 'INT') AS RoleTypeID
FROM @ResourcePermissionXML.nodes('/ResourcePermission') AS PermissionEntries(Entries)
SELECT * FROM @ResourcePermissionList
Upvotes: 1
Views: 186
Reputation: 754518
Just change your INSERT
statement to this:
INSERT INTO @ResourcePermissionList(RoleTypeID)
SELECT Entries.value('(.)[1]', 'INT') AS RoleTypeID
FROM @ResourcePermissionXML.nodes('/ResourcePermission/RoleTypeID') AS PermissionEntries(Entries)
Basically, change the XPath expression in .nodes()
so that it returns a list of XML fragements for each <RoleTypeID>
XML element - then you can "reach into" that XML element and get its value, and since the XPath will return all <RoleTypeID>
elements, you get all values.
Upvotes: 2