最近在做批量插入SQL Server时,出现了SQL参数过多的错误异常。经查阅资料,发现SQL server对于SQL中用户自定义的参数限制为2100个。于是变更了批量插入的分组数,解决该问题。
以下是搜集的关于SQL Server的最大容量规范,包含数据库引擎对象、实用工具对象、数据层引用对象、复制对象四个对象中的相关最大数量和最小数量。一般开发者重点还是在数据库引擎对象这块。个人觉得比较重要的都进行了加粗变色处理。
数据库引擎 对象
在 SQL Server 数据库中定义的或在 Transact-SQL 语句中引用的各种对象的最大大小和最大数量。
SQL Server 数据库引擎 对象 (object) | 最大大小/数量 SQL Server (64 位) | 其他信息 |
---|---|---|
批大小 | 65,536 * 网络数据包大小 | 网络数据包大小指的是用于在应用程序和关系 数据库引擎之间进行通信的表格格式数据流 (TDS) 数据包的大小。 默认的数据包大小为 4 KB,由“网络数据包大小”配置选项控制。 |
每个短字符串列的字节数 | 8,000 | |
每个 GROUP BY、ORDER BY 的字节数 | 8,060 | |
每个索引键的字节数 | 聚集索引为 900 字节。 非聚集索引为 1,700 字节。 | 在 SQL Server中,聚集索引键的最大字节数不能超过 900。 对于非聚集索引键,最大值为 1700 个字节数。 你可以使用可变长度列来定义键,这些列的最大大小之和可超过此限制。 但是,这些列中数据的总大小绝不能超过此限制。 在非聚集索引中,可以包含额外的非键列,且这些非键列不会算入键的大小限制。 非键列可能有助于更好地执行某些查询。 |
内存优化表中的每个索引键的字节数 | 非聚集索引为 2,500 字节。 哈希索引没有限制,只要全部索引键均适应行内即可。 | 在内存优化表上,非聚集索引不能具有声明的最大大小超过 2500 个字节的键列。 这与键列中实际数据是否短于声明的最大大小并不相关。 因为,哈希索引没有硬性大小限制。 对于内存优化表的索引,不存在“包含的列”这一概念,因为所有索引本来就覆盖了所有的列。 对于内存优化表,即使行大小为 8060 个字节,一些可变长度列也可以物理方式存储于这 8060 个字节以外的空间。 但是,表上所有索引的所有键列,加上表中任何其他固定长度列,其最大声明大小不得超过 8060 个字节。 |
每个外键的字节数 | 900 | |
每个主键的字节数 | 900 | |
每行的字节数 | 8,060 | SQL Server 支持行溢出存储,行溢出存储使长度可变的列可以被推送到行外。 只有 24 字节的根存储在推送出行外的可变长度列的主记录中;因此,此版本中的有效行限制高于 SQL Server早期版本中的有效行限制。 有关更多信息,请参阅 |