当表在SQL Server中为空时,生成表结构的XML

时间:2016-09-01 16:28:21

标签: sql sql-server xml

我正在尝试生成一个包含一行的表,该行包含存储过程中每个临时表的XML。

问题是当表格为空时,react-router会返回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

1 个答案:

答案 0 :(得分:1)

无论你怎么做这个......

您可能希望查看sp_describe_first_result_set,但是,由于这是一个过程,因此将结果放入查询中并不容易......

您可以使用技巧(RIGHT JOIN)来强制执行结果集。使用ELEMENTS XSINIL,您可以强制引擎在任何情况下都包含该列。否则,XML会将缺少的元素作为NULL,因此您的空结果将不会被写入结果XML中。试试这个:

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

结果

<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>

如果您想了解更多详情,可以添加,XMLDATA,XMLSCHEMA来生成完整的元数据。