【发布时间】:2020-12-28 04:46:37
【问题描述】:
我想运行一个查询来释放由sp_xml_preparedocument 创建的 XML 解析所占用的空间,然后会话被终止。我的代码是这样的:
DECLARE @idoc INT, @result XML
SELECT @result = Result
FROM XmlFieldTable
EXEC sp_xml_preparedocument @idoc OUTPUT, @result
-- some query in the middle
EXEC sp_xml_removedocument @idoc;
我想确保在会话被杀死之前删除句柄,否则内部缓存可能会溢出,我该怎么办?
我已经尝试使用 try/catch 语句或事务,但没有帮助。
【问题讨论】:
-
XML 的哪个空间?哪个把手?为什么会话会在事务不回滚的情况下被终止? @idoc 代表什么?
-
@Charlieface 抱歉,我已经更新了内容。根据Microsoft Document,sp_xml_preparedocument 将使用服务器的内部缓存来存储已解析的 XML。您也可以查看my question了解更多信息。
-
我建议使用内置的 XQuery 支持,而不是使用这种带有大量已知内存泄漏和问题的旧代码......
-
@marc_s 感谢您的推荐,但在某些情况下,
openxml比Xquery快得多,您可以查看this answer 了解更多信息。
标签: sql-server tsql