Я пытаюсь передать локальную переменную в функции XML.modify как узел в моем SQL-скрипте, так как xml, пытающийся быть измененным, является динамическим. См ниже кодИспользовать локальную переменную SQL для XML-узла
DECLARE
@XML VARCHAR(MAX) = 'ns:Messages/ns:T001.0_NewSPIDRequests/ns:T001.0_NewSPIDRequest/ns:D2009_SWConnectionRef'
;WITH XMLNAMESPACES('urn:bridgeall-com:cmaservice:data:v3' AS ns)
UPDATE XMLMessageFeeder
SET theXML.modify('replace value of (/ns:Submission/*[local-name(.) = sql:variable("@XML")]/text())[1] with ("New Value")')
SELECT theXML
FROM XMLMessageFeeder
Этот вопрос я имею выше, не обновляет значение этого узла еще, если я должен был установить заменить как:
SET theXML.modify
('
replace value of (/ns:Submission/ns:Messages/ns:T001.0_NewSPIDRequests/ns:T001.0_NewSPIDRequest/ns:D2009_SWConnectionRef/text())[1]
with ("New Value")
')
Этот работает. По моим сведениям (это мало), они оба передают один и тот же код замены, но использование переменной, похоже, не работает.
Может кто-нибудь указать мне в правильном направлении?
EDIT Ответ можно найти ниже в комментариях.
так что наличие всех узлов в пределах одной переменной в основном является тупиком? Я должен иметь несколько переменных, которые содержат каждый отдельный узел, который им нужен. EG 'Variable1 = T001.0_NewSPIDRequests, Variable2 = T001.0_NewSPIDRequest' и т. Д., То в пределах значения replace есть что-то вроде строк' (/ ns: Submission/ns: Messages/ns: * [local-name() = sql : variable ("@ Variable1")]/ns: * [local-name() = sql: variable ("@ Variable2")] ' – Blahwoo
@Blahwoo Да. Вы можете сделать это с несколькими переменными, но вам нужно решить глубину (в вашем случае это выглядит как четыре). Разумеется, вы могли бы построить инструкцию обновления динамически и выполнить с помощью sp_executesql. Или, если имя конечного листового узла достаточно, чтобы найти нужный вам узел, вы можете использовать '// 'делать глубокий поиск узла. Что-то вроде' // * [local-name (.) = sql: ..... ' –
Спасибо за это! Это очень помогло мне :) – Blahwoo