我需要将以下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
只需将您的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 fragements列表 - 然后您可以“到达”该XML元素并获取其值,并且由于XPath将返回所有<RoleTypeID>
元素,因此所有价值观。