我需要将以下XML中的所有RoleTypeID
s(10,9)插入到表中。
我遵循以下方法。它仅插入第0个索引的XML条目。如何解决这个问题?
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
答案 0 :(得分:2)
只需将您的INSERT
语句更改为此:
INSERT INTO @ResourcePermissionList(RoleTypeID)
SELECT Entries.value('(.)[1]', 'INT') AS RoleTypeID
FROM @ResourcePermissionXML.nodes('/ResourcePermission/RoleTypeID') AS PermissionEntries(Entries)
基本上,更改.nodes()
中的XPath表达式,以便它为每个<RoleTypeID>
XML元素返回一个XML片段列表-然后您可以“进入”该XML元素并获取其值,并且由于XPath将返回所有<RoleTypeID>
元素,因此您将获得所有值。