0

親要素に特定の値があり、かつ特定の値がある場合にのみ要素を削除するために、ストアド プロシージャ内の xquery ステートメントで論理 and 演算子を使用することは可能ですか? そのような:

SET @profiles_xml = (SELECT profiles from tbl_applied_profiles WHERE profiles.value('(Profile/ID)[1]','int')= @profile_id)
    SET @profiles_xml.modify('
    delete
    if(/Profile/User/ID=sql:variable("@user_id")) and (/Profile/User/Activities/Activity/Name = sql:variable("@activity_name"))
    then (/Profile/User/Activities/Activity)
    else()
    ')

ユーザー ID 要素とアクティビティ名要素が指定されたパラメーターと一致する場合にのみ、アクティビティを削除したいと思います。profile_xml の xml は次のようになります。

<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
         <Name>activity1</Name>
      </Activity>
    </Activities>
  </User>
</Profile>

しかし、将来的には、要素の子として各要素と複数要素に複数の要素が存在する可能性があります。

4

1 に答える 1

4
declare @XML xml = '
<Profile>
  <ID>20</ID>
  <User>
    <ID>BC4A18CA-AFB5-4268-BDA9-C990DAFE7783</ID>
    <Name>somename</Name>
    <Activities>
      <Activity>
         <Name>activity1</Name>
      </Activity>
    </Activities>
  </User>
</Profile>'

declare @user_id nvarchar(50) = '20'
declare @activity_name nvarchar(50) = 'activity1'

set @XML.modify('delete /Profile[ID = sql:variable("@user_id")]
                        /User/Activities/
                        Activity[Name = sql:variable("@activity_name")]') 

select @XML
于 2012-11-05T13:30:45.823 に答える