我正在尝试生成一个包含一行的表,该行包含存储过程中每个临时表的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
答案 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
来生成完整的元数据。