2016-11-18 5 views
0

Я имею Xpath удалить из XML в переменной VARCHAR (MAX), но XML.modify('delete '[email protected]) выдаст ошибку,XQUERY удалить с Xpath из SQL: переменная

Аргумент 1 метода типа данных XML «изменить "должна быть строка буквальная.

DECLARE @myXML XML, 
     @MyXpath VARCHAR(MAX) 

-- Processing of Xpaths for components needed to remove 
-- Adding those in @XpathsToRemove  

SELECT TOP(1) @MyXpath = [XPATH] 
FROM @XpathsToRemove 

SET @myXML.modify('delete '[email protected]) 

Есть ли способ, чтобы удалить эти компоненты с Xpath доступны в переменной @MyXpath?

- Редактирование Пример XML

DECLARE @myXML XML ='<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Dont forget me this weekend!</body> 
</note>' 
     ,@MyXpath VARCHAR(MAX) = '//note/from' 

     -- There are many Xpaths and dynamically generated with some processing so I don't want to hardcode Xpath there 
     SET @myXML.modify('delete '[email protected]) 

     --This doesn't works too 
     -- SET @myXML.modify('delete "sql:variable("MyXPath")"') 
     SELECT @myXML 
+0

* Есть ли способ * Короткий ответ: Да, * динамически созданный SQL * и 'EXEC'. Если вам нужна помощь, вы должны предоставить более подробную информацию. Чего именно вы хотите достичь? – Shnugo

+0

@Shnugo Если я создаю SQL и EXEC, тогда он не может взаимодействовать с локальными переменными i.e '@ myXML'. Мне не интересно делать какие-либо изменения на стороне БД, просто чтобы обновить эту локальную переменную '@ XML' –

+0

Как вы ожидаете от меня помощи? Я не знаю вашу переменную, и я не знаю «XPath», которую вы хотите представить. В общем: то, что вы пытаетесь, не будет работать! Представьте рабочий пример: (сокращенный) XML и рабочий оператор с буквально написанным '.modify()'. Затем объясните, какую часть вы хотите динамически менять, и надейтесь, что кто-то может предложить решение. – Shnugo

ответ

0

Спасибо, ребята, я получил решение по EXEC для создания динамических запросов. Ниже ссылка, что решить мою проблему,

How to using for loop using XQuery to delete xml nodes [duplicate]

Solution,

DECLARE @str nvarchar(MAX) 
SET @str = 'SET @MyXML.modify('+char(39)+'delete '[email protected]+'/*'+char(39)+'); ' 
EXEC sp_executesql @str, N'@MyXML xml output', @MyXML output