連結処理中にnull xml要素をnull値に置き換えようとしています。そして私はいくつかのばかげたミスをしています。私は空の値とヌル値を区別したい。 XMLデータを解析するのにOpenXMLを使用していますが、nullベースのparam要素を読み取るコードには何かがありません。Sql Server - XMLの場合 - 要素からヌル値を取得する
私はServer Server 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