我有一个返回以下输出的存储过程:
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 服务器中使用临时表。 临时表在会话关闭后自毁。 所以你必须使用不同的场景。