可以从 sql server 中的 sproc 返回到 ADO.NET 应用程序的最大数据量是多少

Posted

技术标签:

【中文标题】可以从 sql server 中的 sproc 返回到 ADO.NET 应用程序的最大数据量是多少【英文标题】:What is the maximum amount of data that can be returned from a sproc in sql server to ADO.NET application 【发布时间】:2015-12-09 01:58:27 【问题描述】:

我们有一个需要检索客户的所有订单的 Windows 服务。在某些情况下,客户可能拥有大量订单。所以想知道对于可以从 SQL Server 中的存储过程返回到 ADO.NET 应用程序的数据大小是否存在已知限制。然后我可以计算表中行的平均大小并提供每个客户的最大订单数限制。 谢谢。

【问题讨论】:

可以返回的行数没有限制。 当我说大量订单时,我的意思是,大约 100 万。这也有用吗? @NullSkull90 你看了我下面的回答了吗? DataReader“技术上”支持最大数据类型。你显然应该做一些测试。 没有行数限制。如果我没记错的话,SQL Server 数据库的最大大小约为 500,000 TB。您离那还很远,另外,返回的行数没有限制。您的接口方法可能有限制,但如果您使用像数据阅读器这样的 .Net 流方法,唯一的限制是您的时间和耐心。 (以及您客户的内存或存储,如果您想一次保留它们) @WilliamXifaras OP 询问的是行限制,而不是列大小限制。 【参考方案1】:

显然我不能重复这一点:没有行数限制。

如果我没记错的话,SQL Server 数据库的最大大小约为 500,000 TB。你离那还很远,另外,返回的行数没有限制。您的接口方法可能有限制,但如果您使用像 datareader 这样的 .Net 流式传输方法,唯一的限制是您的时间和耐心(以及您的客户的内存或存储空间,如果您正在尝试一次保留它们)。

【讨论】:

【参考方案2】:

由于您使用的是 ADO.NET,因此 DataReader 支持最大数据类型。如果您要处理大量结果集,则必须使用批处理策略。

大对象 (LOB) 数据类型是那些超过最大行大小 8 KB (KB) 的数据类型。 SQL Server 为 varchar、nvarchar 和 varbinary 数据类型提供了一个最大说明符,以允许存储最大为 2^32 字节的值。表列和 Transact-SQL 变量可以指定 varchar(max)、nvarchar(max) 或 varbinary(max) 数据类型。 在 ADO.NET 中,最大数据类型可以由 DataReader 获取,也可以指定为输入和输出参数值,无需任何特殊处理。对于大型 varchar 数据类型,可以增量检索和更新数据。

https://msdn.microsoft.com/en-us/library/bb399384(v=vs.110).aspx

我刚刚发现以下 SO 帖子也很相关。

SQL Server and SqlDataReader - Trillion Records - Memory

【讨论】:

以上是关于可以从 sql server 中的 sproc 返回到 ADO.NET 应用程序的最大数据量是多少的主要内容,如果未能解决你的问题,请参考以下文章

csharp 解析通过T-SQL从连接子句推断外键 - 注意:不完整。只支持seroc中的sprocs和一些语法结构

在 SQL Server 2008 中使用集合作为函数/存储过程的参数?

我应该如何执行 SQL ETL 脚本和 SPROC 的自动化测试?

如果所有 SQL 都在做 SELECT,那么使用视图与 SPROC 是不是有优势

SQL Server - SELECT FROM存储过程

sql 查找最近未运行的sprocs