2016-09-01 15 views
0

ストアドプロシージャ内の各テンポラリテーブルのXMLを含む1つの行を含むテーブルを生成しようとしています。SQL Serverで空のときにテーブル構造のXMLを生成

テーブルが空の場合、FOR XML PATH('RS'), root('OR_RS')nullを返します。私が欲しいもの

は次のとおりです。テーブルが空の場合、 何かのように、このテーブルの構造体を返す:

<OR_RS> 
    <ContactCode></ContactCode> 
    <EmailPaper></EmailPaper> 
    <ShortEmail></ShortEmail> 
    <WebSite></WebSite> 
    <Providers></Providers> 
</OR_RS> 

私はこれを行うことを試みた:

-- ,ISNULL((SELECT * FROM #OR_RS FOR XML PATH('RS'), root('OR_RS')), (SELECT ISNULL(ContactCode,'') , ISNULL(EmailPaper,'') , ISNULL(ShortEmail,'') , ISNULL(WebSite,'') , ISNULL(Providers,'') FROM #OR_RS FOR XML RAW)) as OR_RS 

をそれが返されますいつもNull

SELECT 1 as Id, (SELECT * FROM #OR_MK FOR XML PATH('MK'), root('OR_MK')) as OR_MK 
,(SELECT * FROM #OR_CA FOR XML PATH('CA'), root('OR_CA')) as OR_CA 
-- ,ISNULL((SELECT * FROM #OR_RS FOR XML PATH('RS'), root('OR_RS')), (SELECT ISNULL(ContactCode,'') , ISNULL(EmailPaper,'') , ISNULL(ShortEmail,'') , ISNULL(WebSite,'') , ISNULL(Providers,'') FROM #OR_RS FOR XML AUTO)) as OR_RS 
,(SELECT * FROM #OR_RS FOR XML PATH('RS'), root('OR_RS')) as OR_RS 
,(SELECT * FROM #OR_DC FOR XML PATH('DC'), root('OR_DC')) as OR_DC 
,(SELECT * FROM #BENEFICIARY FOR XML PATH('BEN'), root('BENEFICIARY')) as BENEFICIARY 
,(SELECT * FROM #MK_REPORT for XML PATH('REP'), root('MK_REPORT')) as MK_REPORT 

答えて

1

あなたが何をしようとしてもHこの...

あなたはsp_describe_first_result_setを見てすることがあります、しかし、これは手続きであることから、それは簡単にあなたのクエリにその結果を取得することができません...

あなたが使用することができます結果セットを強制するためのトリック(RIGHT JOIN)。 ELEMENTS XSINILを指定すると、エンジンにはどのような場合でも列が含まれます。そうでない場合、XMLは欠落した要素をNULLとみなします。その結果、空の結果は結果XMLに書き込まれません。これを試してください:あなたは詳細を取得したい場合は、,XMLDATAまたは,XMLSCHEMAがフルのメタデータを生成するために追加される場合があります

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <ID xsi:nil="true" /> 
    <SomeValue xsi:nil="true" /> 
    <SomeString xsi:nil="true" /> 
    <x>1</x> 
</row> 

DECLARE @tbl TABLE(ID INT IDENTITY,SomeValue INT,SomeString VARCHAR(100)); 

SELECT * 
FROM @tbl 
RIGHT JOIN (SELECT 1 AS x) AS tbl ON 1=1 
FOR XML RAW, ELEMENTS XSINIL 

結果。

関連する問題