연결을 수행하는 동안 null xml 요소를 null 값으로 바꾸려고합니다. 그리고 저는 어리석은 실수를 저지르고 있습니다. 빈 값과 널 값을 구별하고 싶습니다. OpenXML을 사용하여 XML 데이터를 구문 분석하고 null 기반 param 요소를 읽는 코드에 누락 된 것이 있습니다.Sql Server - XML의 경우 - 요소의 null 값 가져 오기
내가 제안하십시오 서버 서버 2014
을 사용하고 있습니다.
DECLARE @message_body XML;
DECLARE @XMLParameterData Table
(SeqID INT Identity(1,1),
ParamValue varchar(max))
DECLARE @docRef int
DECLARE @dataPath nvarchar(255)
DECLARE @mappingType int = 2 --Element-Centric mapping
Select @message_body = N'<AsyncRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ParamList> <Param>Bruce</Param>
<Param>Wa''yne</Param>
<Param>[email protected]</Param>
<Param>Coke</Param>
<Param>20000</Param>
<Param xsi:nil="true"/>
<Param></Param>
</ParamList>
</AsyncRequest>';
Set @dataPath = '/AsyncRequest/ParamList/Param'
EXEC sp_xml_preparedocument @docRef output, @message_body
INSERT INTO @XMLParameterData(ParamValue)
Select * From OpenXML(@docRef, @dataPath, @mappingType)
WITH
(
valx varchar(max) '.'
)
-- the xml document ref needs to be released ASAP
EXEC sp_xml_removedocument @docRef
SELECT * From @XMLParameterData
DECLARE @CSVString varchar(max)
SELECT @CSVString = STUFF(
(SELECT ', ' +
CHAR(34) + ParamValue + CHAR(34)
FROM @XMLParameterData
ORDER BY SeqID
FOR XML PATH('')
), 1, 1, '')
SELECT @CSVString as CSVTest
출력 : - "브루스", "Wa'yne", "[email protected]", "콜라", "20000", "", ""
원하는 출력 : - "브루스", "Wa'yne", "[email protected]", "콜라", "20000", NULL ","나는 약간하여 코드를 단순화 (이것에 대해 어떻게
고마워, 잘 했어 :-) – Karan
내 기쁨! :) – gofr1