通常,我们可以提供更多的值,最多可以提供一个表在SQL Server中可以拥有多少行?之后我们无法添加新行.
有一些边缘情况(在明显的磁盘空间问题之外),SQL Server将阻止您添加更多行,而不是确切的行数,但值得一提:
你有一个IDENTITY列,你点到数据类型的范围的末尾,例如255 for TINYINT,2,147,483,647 for INT,一些以9开头的不敬虔的数字 - 可能是太阳和后面的英寸数 - BIGINT等等.当你尝试插入下一行,您将收到有关溢出类型的错误消息815.这与表中已有的行数本身无关,而是与您已尝试插入的行数(无需重新播种IDENTITY列)无关.如果您有很高比例的回滚(或大量成功插入),您可能希望随时间跟踪此列中的最大值.
如果您的堆具有非唯一索引,或者聚簇索引不是唯一的,则您将无法存储超过2*2,147,483,647个唯一索引键组合.当您尝试插入(2*2,147,483,647)+ 1行用的值1在INT列,它是在一个聚集索引的唯一列,你会得到错误信息约666耗尽uniqueifier.这是因为uniqueifier(它帮助SQL Server在没有真正的密钥时识别一行)只有4个字节,这意味着它不能超过a的容量INT(它确实使用正面和负面,不像IDENTITY将它配置为这样,这就是为什么你得到双倍).现在你为什么会这样做,<耸肩> ......但你可以.
在VLDB空间中,数据库只能是524,272太字节.同样是一个非常优秀的案例,但如果你有一个庞大的数据仓库,那么显然在某些时候行数 - 取决于行的大小 - 将使你接近这个限制.我认为petabyte数据库虽然据称存在于某个实验室的某个角落,但在很大程度上是理论上的.我认为技术上SQL Server的Max Capacity页面上的"受可用存储限制"声明可以考虑这个最大大小,或者他们可以假设没有人会有超过524,272TB的存储可用于单个SQL实例服务器(今天可能是一个合理的假设,但是640K的RAM,曾经:-)).
可能还有其他类似的学术案例,但当我看到问题的标题时,我立即想到了这三个案例.它们非常模糊,主要是学术性的,但我仍然认为它们应该被纳入讨论中.