2016-06-25 282 views
0

XMLタグの値を置き換える際に助けが必要です。私はこれを正しく理解していれば、あなたが置くことによって名称「V_userId」の要素にアクセスしようとしているSQL XMLの置き換え

.../@l_s_DrillBtColumnTag))[1] 

declare @l_runtime_xml XML 
declare @l_n_DrillRepID numeric(10) 
declare @griddrillparam nvarchar(30) 
declare @l_s_DrillBtColumnTag nvarchar(256) 
declare @l_s_BTNameSecond nvarchar(30) 

set @l_n_DrillRepID =1538 
set @griddrillparam = 'userID' 
set @l_s_DrillBtColumnTag = 'V_userID' 
set @l_s_BTNameSecond = 'l_s_userID' 

declare @l_runtime_xmlAAA nvarchar(max) 
set @l_runtime_xmlAAA = N'<REPORT_RUNTIME_XML><USER_ID>AISHU</USER_ID><SHEET><SHEET_NO>1</SHEET_NO><DRILLTHRU_PARAM><ENT_RPT><ENT_RPT_ID>1537</ENT_RPT_ID><ENT_RPT_NAME>Reddy111</ENT_RPT_NAME><DEFAULT>1</DEFAULT><CRITERIA><DISPLAY/><HIDDEN/></CRITERIA><COLUMN_HEADER>N</COLUMN_HEADER><DISPLAY_BUTTON>N</DISPLAY_BUTTON><PARAMLIST><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>userID</NAME><BT_NAME/><V_userID>(none)</V_userID></PARAM><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>langID</NAME><BT_NAME/><V_langID>(none)</V_langID></PARAM><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>l_s_userID</NAME><BT_NAME/><V_l_s_userID>(none)</V_l_s_userID></PARAM><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>a_i_langID</NAME><BT_NAME/><V_a_i_langID>(none)</V_a_i_langID></PARAM></PARAMLIST></ENT_RPT><ENT_RPT><ENT_RPT_ID>1538</ENT_RPT_ID><ENT_RPT_NAME>Reddy333</ENT_RPT_NAME><DEFAULT>0</DEFAULT><CRITERIA><DISPLAY/><HIDDEN/></CRITERIA><COLUMN_HEADER>N</COLUMN_HEADER><DISPLAY_BUTTON>N</DISPLAY_BUTTON><PARAMLIST><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>userID</NAME><BT_NAME/><V_userID>(none)</V_userID></PARAM><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>langID</NAME><BT_NAME/><V_langID>(none)</V_langID></PARAM><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>l_s_userID</NAME><BT_NAME/><V_l_s_userID>(none)</V_l_s_userID></PARAM><PARAM><COLTYPE/><POSITION>-999</POSITION><BT_COLUMN_NAME/><NAME>a_i_langID</NAME><BT_NAME/><V_a_i_langID>(none)</V_a_i_langID></PARAM></PARAMLIST></ENT_RPT></DRILLTHRU_PARAM></SHEET></REPORT_RUNTIME_XML>' 

select @l_runtime_xml = cast(@l_runtime_xmlAAA as XML) 

SET @l_runtime_xml.modify('replace value of ((//SHEET/DRILLTHRU_PARAM/ENT_RPT[(ENT_RPT_ID/text())[1] eq sql:variable("@l_n_DrillRepID")]/PARAMLIST/PARAM[(NAME/text())[1] eq sql:variable("@griddrillparam")]/@l_s_DrillBtColumnTag))[1] with sql:variable("@l_s_BTNameSecond")') 

set @l_runtime_xmlAAA = cast(@l_runtime_xml as nvarchar(max)) 

select @l_runtime_xmlAAA 
+0

をしたりしますか? – user1587872

+1

あなたは言葉とで置き換える必要なロジックを説明していただけますそれは間違っています。そして、はい、それは最後のノードを削除することは可能です。あなたは答えたいですか、削除イオンまたは交換品 –

+0

ありがとう@PhilB。主に私は交換が必要でした。そして私はそれをする方法を得た。私は代わりとして削除を求めていました。 – user1587872

答えて

1

は、私はあなたの問題はここにあると思う:次のようにサンプルコードがありますその場所の変数。しかし、これは動作しません...

あなたの質問は私にはっきりしていません(そして、おそらくあなたの構造もどちらかというと複雑すぎると思われます...)。 の最後の子を削除するとどういう意味ですか

あなたのクエリは、次のようになります。

、名前が与えられているものであり、同じレベルで指定された名前を持つ要素を見つける「PARAM」が見つけ、与えられた数を持つ「ENT_RPT」を検索(local-name()を参照)。これを与えられた値に置き換えてください:

私はあなたが名前付きパラメータを扱っていることを前提としています。これらのパラメータの値を、すべて同じ名前の要素に入れる方がはるかに優れていました(たとえば、<VALUE>something</VALUE>)。 "NAME"で指定されています。

さらに、

...<PARAM Name="userName" position="-999" moreAttributes...>SomeValue</PARAM> 

これは、ノードの最後の子を削除することが可能である、...あなたのナビゲーションははるかに簡単かつ少ないerronous

関連する問題