ストアド プロシージャを使用して、パラメーターとして渡された値を列の xml の要素に挿入したいと考えています。これまでのところ、次のパラメーターがあります。
@profile_id int,
@user_id nvarchar(50),
@activity_name nvarchar(50),
@display_name nvarchar(50)
目的の xml を取得します。
DECLARE @profiles_xml xml
SET @profiles_xml = (SELECT profiles from tbl_applied_profiles WHERE profiles.value('(Profile/ID)[1]','int')= @profile_id)
@profiles_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>
特定の ID を持つユーザーにアクティビティ名と表示名を挿入しようとしています:
SET @profiles_xml.modify('
insert
if(/Profile/User/ID=sql:variable("@user_id"))
then Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
else()
as first
into (/Profile/User/Activities)[1]')
私もこれを試しましたが成功しませんでした:
SET @devices_xml.modify('
insert /Profile/User[ID=sql:variable("@user_id")]/Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
into (/Profile/User/Activities)[1]')
この:
SET @devices_xml.modify('
insert
/Profile/User[ID=sql:variable("@user_id")]/Activities/Activity[Name=sql:variable("@activity_name")][DisplayName=sql:variable("@display_name")]
into (/Profile/User/Activities)[1]')
これを行う正しい方法は何ですか?