3

我正在尝试插入一些我从表中的列中检索的 xml。我检索它如下:

DECLARE @profiles_xml xml
DECLARE @profile_id int
SET @profile_id = 16
SET @profiles_xml = (SELECT profiles from tbl_applied_profiles WHERE
profiles.value('(Profile/ID)[1]','int')= @profile_id)

生成的 xml 如下所示:

<Profile>
  <ID>16</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>test</Name>
    <Activities />
  </User>
</Profile>

但是,当我尝试像这样将元素插入其中时:

SET @devices_xml.modify('insert <Activity><Name>testname</Name></Activity>
 as first into (Profiles/User/Activities[1])')

我收到以下错误:

XQuery [modify()]: The target of 'insert' must be a single node, found 'element(Activities,xdt:untyped) *'

我不明白为什么会出现错误,因为目前只有一个活动元素。

4

1 回答 1

8

你有两个小错误:

  • 顶级 XML 节点是<Profile>- 但您Profiles在插入 XQuery 中有
  • 即使您的集合可能没有条目或只有一个条目 - 您指定的 XPath可能会返回多个节点 - 所以您需要明确告诉它采用这些节点中的第一个。在这里,您将[1]索引器放在错误的位置(在关闭的内部))。

试试这个 XQuery:

SET @devices_xml.modify('insert <Activity><Name>testname</Name></Activity>
                         as first into (Profile/User/Activities)[1]')

至少在我的情况下,然后返回:

<Profile>
  <ID>16</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>test</Name>
    <Activities>
      <Activity>
        <Name>testname</Name>
      </Activity>
    </Activities>
  </User>
</Profile>
于 2012-11-05T05:45:06.797 回答