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

时间:2009-02-28 11:26:55

标签: c# sql-server sql-server-2005

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

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

此外,XmlReader中可容纳的数据是否有任何限制?

任何想法......

8 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

请务必使用以下代码:

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

否则,如果XML文档太大而无法放入一条记录,则可能最终会出现无效的XML。 SQL Server会将它分散到多个记录中,直到今天......

答案 3 :(得分:0)

不,没有限制。但显而易见的是,如果返回数兆字节的数据,数据检索的速度将受到影响。

答案 4 :(得分:0)

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

对于XML会给数据库服务器带来额外负担,您确定在应用服务器或客户端上将原始数据处理成XML会更好吗?

答案 5 :(得分:0)

如果您在SQL Server Management Studio中看到了结果,可以选择设置可显示的数据量,默认只有2MB。

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

答案 6 :(得分:0)

SQL Server - > XML,然后C#将文本翻译成XML。那里效率不高。

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

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

答案 7 :(得分:0)

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

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

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

                return xmlDocument;
            }