从存储过程中读取C#XML输出会从TEMP表SQL Server中返回null

时间:2018-09-09 15:47:58

标签: c# sql-server stored-procedures

我有一个存储过程,该存储过程返回以下输出:

DECLARE @ExistingXML XML =
(
    SELECT TOP 2 * 
    FROM #xmlInput 
    FOR XML PATH('Record'), ROOT('Records'), ELEMENTS
);

DECLARE @XmlWithDeclaration VARCHAR(MAX) =
(
    SELECT '<?xml version="1.0" encoding="windows-1252"?>'
           +
           '<test>hello</test>'
           --CONVERT(VARCHAR(MAX),@ExistingXml)
);


SELECT @XmlWithDeclaration;

使用'<test>hello</test>'时效果很好。但是,当从CONVERT(VARCHAR(MAX),@ExistingXml)语句中读取数据时。它从不返回临时表中的值。但是,此存储过程-从SSMS执行时-可以很好地显示输出。

我正在尝试通过下面的代码阅读。请忽略@ReportID,因为这是我想做的虚假事情。

string xmlResult = await DLContext.Database.SqlQuery<string>("exec [dw].[spPROCName] @ReportID"
                   , new SqlParameter("@ReportID", 8)).FirstOrDefaultAsync();

if (!string.IsNullOrEmpty(xmlResult))
    Console.WriteLine($"XML RESULT :{xmlResult}");
else
    Console.WriteLine("--Failed--. No Result or null");

它总是显示其他部分,而不是我可以得到两个结果的肯定情况。

知道为什么吗?

更新: 另一件事是,当我从物理表中提取数据时,上面的代码工作得很好。但是,对于临时表,它失败了,因为在解析6MB xml文件时将插入临时表数据。这可能是原因吗?

1 个答案:

答案 0 :(得分:0)

根据您的编码,您正在Sql服务器中使用临时表。 会话关闭后,临时表会自毁。 因此,您必须使用不同的方案。