我有一个存储过程,该存储过程返回以下输出:
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文件时将插入临时表数据。这可能是原因吗?
答案 0 :(得分:0)
根据您的编码,您正在Sql服务器中使用临时表。 会话关闭后,临时表会自毁。 因此,您必须使用不同的方案。