Orders 테이블에 OrderXML이라는 XML 열이 있습니다 ...
비교 (포함) 비교를 수행해야하는 노드를 포함하여 두 노드의 값을 확인하여 SQL Server의 XML 열을 업데이트하는 방법
<InternalOrderDetails>
<InternalOrderDetail>
<Item_Number>FBL11REFBK</Item_Number>
<CountOfNumber>10</CountOfNumber>
<PriceLevel>FREE</PriceLevel>
</InternalOrderDetail>
<InternalOrderDetail>
<Item_Number>FCL13COTRGUID</Item_Number>
<CountOfNumber>2</CountOfNumber>
<PriceLevel>NONFREE</PriceLevel>
</InternalOrderDetail>
</InternalOrderDetails>
내 최종 목표는 OrderXML 열 IF에서 XML을 수정하는 것입니다 InternalOrderDetails이 같은 많은 InternalOrderDetail 노드가 포함
/Order/InternalInformation/InternalOrderBreakout/InternalOrderHeader/InternalOrderDetails/InternalOrderDetail
... 테이블에서이 같은 XML의 XPath는 ...입니다 노드의 Item_Number에 다음을 포함합니다. COTRGUID ('% COTRGUID'와 같은)와 PriceLevel = NONFREE. 이 조건이 충족되면 PriceLevel 열을 FREE로 변경하고 싶습니다.
(OrderXML.value 또는 OrderXML.exist 함수를 사용하여) 정확한 노드를 찾는 xpath 표현식을 작성하고 OrderXML.modify 함수를 사용하여 XML을 업데이트하는 데 문제가 있습니다.
내가 where 절에 대해 다음 시도 :
WHERE OrderXML.value('(/Order/InternalInformation/InternalOrderBreakout/InternalOrderHeader/InternalOrderDetails/InternalOrderDetail/Item_Number/node())[1]','nvarchar(64)') like '%13COTRGUID'
작업을 수행하지만, 내가 같은 내 두 번째 조건을 (PriceLevel = 비 자유)를 포함 할 필요가 날 것으로 보인다 where 절 및 나는 그것을하는 방법을 알아낼 수 없다. 아마도 내가 ...에서와 같은 두 번째 조건
AND OrderXML.value('(/Order/InternalInformation/InternalOrderBreakout/InternalOrderHeader/InternalOrderDetails/InternalOrderDetail/PriceLevel/node())[1]','nvarchar(64)') = 'NONFREE'
을 넣을 수 있지만, 나는 그것이 XML 질의 이후에 OR처럼 운영 종료됩니다 두렵다. 나는 WHERE 절 바로 내가 이런 SET 사용하여 열을 업데이트합니다 일단
: 그러나
UPDATE Orders SET orderXml.modify('replace value of (/Order/InternalInformation/InternalOrderBreakout/InternalOrderHeader/InternalOrderDetails/InternalOrderDetail/PriceLevel[1]/text())[1] with "NONFREE"')
을, 나는 비록 (테스트 데이터 및 업데이트 된 XML 열의 없음에이 문장을 실행 그것은 zz 행이 영향을 미쳤다 고 말했다).
나는 몇 시간 동안 아무 소용이 없었습니다. 도움을 주시면 감사하겠습니다. 감사.
는, 당신을 주어 답을 확인하세요 사람들이 올바른 답을 찾을 수 있도록 안내하거나 자신의 답변을 작성하여 받아 들일 수 있습니다. –
이 중 어느 것도 나에게 필요한 솔루션을 제공하지 못했습니다. 조건이 여러 노드에 해당 될 수있는 경우에도 일치하는 노드) –