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



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

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");

它总是显示 else 部分,而不是我可以得到两个结果的积极情况。

知道为什么吗?

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

根据您的编码,您在 Sql 服务器中使用临时表。 临时表在会话关闭后自毁。 所以你必须使用不同的场景。

最新更新