繁体   English   中英

从 SQL 2005 中的存储过程返回的值是否有大小限制?

[英]Is there any size limit for the values returned from a Stored Procedure in SQL 2005?

我正在尝试使用 For Xml 从 SQL Server 2005 返回 Xml 值。 从 SQL Server 返回的 xml 的大小是否有任何限制?

我将使用 ExecuteXmlReader 来获取我的 C# 代码中的值。

另外,对 XmlReader 中可以保存的数据是否有任何限制?

有什么想法吗...

没有实际限制,但您通常会返回相当于 nvarchar(MAX) 的值,因此您可能会遇到大约 20 亿个字符的限制(由于可用地址空间有限,可能要少得多)。

但是,您需要担心没有小限制,例如 32KB SQL 语句限制。

从技术上讲,由于 XML 数据类型基于 NVARCHAR(MAX) 数据类型,因此存在 1 Gig 限制。 但是,如果您有一个 1 Gig XML 文档,则需要考虑将其缩小。

确保使用以下代码:

while(xmlReader.Read()){ 
...
}

否则,如果您的 XML 文档太大而无法放入一个记录,您最终可能会得到无效的 XML。 SQL Server 会将它分布在多条记录上,所以今天,...

SQL Server -> XML,然后 C# 将文本转换为 XML。 那里效率不高。

拉回数据正常。 使用数据阅读器。 然后你可以把它变成可翻译的格式。 这些数据的消费者是什么? 他们真的需要 XML 吗? 他们需要定期转储数据吗?

或者,您可以使用数据集。 您可能在这里有一个很好的 DataSet 案例。 您可以将其另存为 XML 并保存或发送。 DataSet 旨在保存一堆表数据。

如果你在 SQL Server Management Studio 中看到你的结果,有一个选项可以设置它可以显示多少数据,它默认为只有 2MB。

要更改它,请遵循以下路径:
工具 > 选项 > 查询结果 > SQL Server > 结果到网格 > 检索的最大字符数

不,没有限制。 但是很明显,如果你返回很多兆字节的数据,数据检索的速度就会受到影响。

使用 SQL 2005 和 .Net 2.0 Microsoft 不发布限制,但实际上大型结果集可能会因“内存不足”错误等而失败

由于 XML 给数据库服务器带来了额外的负载,您确定在应用程序服务器或客户端上将原始数据处理为 XML 不会更好吗?

如果您返回的字符数超过此限制,您将收到一个异常“发生意外的文件结尾”,以防止您可以使用以下代码:

            using(XmlReader reader = command.ExecuteXmlReader())
            {
                XmlDocument xmlDocument = new XmlDocument();

                while (reader.Read())
                {
                    xmlDocument.Load(reader);
                }

                return xmlDocument;
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM