2012-11-05 77 views
0

是否可以在存儲過程中的xquery插入語句中使用nvarchar類型的sproc變量? 我的意思是這樣的,元素在其中插入僅與尋求價值是存在的子元素:在xquery if條件中使用varchar存儲過程參數

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

DECLARE @profiles_xml xml 
DECLARE @profile_id int 
DECLARE @user_id nvarchar(50) 
SET @profile_id = 20 
SET @user_id ='BC4A18CA-AFB5-4268-BDA9-C990DAFE7783' 
SET @profiles_xml = (SELECT profiles from tbl_applied_profiles WHERE profiles.value('(Profile/ID)[1]','int')= @profile_id) 
SET @profiles_xml.modify(' 
insert 
if(/Profile/User/ID="user_id") 
then <Activity>activity_name5</Activity> 
else() 
as first 
into (/Profile/User/Activities)[1]') 

其中@profiles_xml包含看起來像這樣的XML

回答

0

您需要使用sql:variable("@user_id"),即

SET @profiles_xml.modify(' 
insert 
if(/Profile/User/ID=sql:variable("@user_id")) 
then <Activity>activity_name5</Activity> 
else() 
as first 
into (/Profile/User/Activities)[1]'); 
select @profiles_xml; 
+0

,對於if條件語句作爲你的建議的工作: '如果(/資料/用戶/ ID = SQL:變量(「@使用r_id「))' 但是如果我還想使用插入到xml中的元素值的參數呢?當我嘗試: '然後 SQL:變量( 「@ SERVICE_NAME」)' 用於插入,它確實會插入值,我看到 ' SQL:變量( 「@ SERVICE_NAME」)' 在生成的XML中。 – Christian