提问人:TheSmurf 提问时间:8/20/2008 最后编辑:Mark HarrisonTheSmurf 更新时间:3/31/2010 访问量:14885
SQL Server 最大行大小
SQL Server Maximum row size
问:
今天遇到了这个错误。想知道是否有人能告诉我这意味着什么:
无法对大小为 9522 的行进行排序,该行大于允许的最大值 8094。
那是 8094 字节吗?字符?领域?这是连接超过某个限制的多个表的问题吗?
答:
0赞
AndyMan
8/20/2008
#1
这曾经是 SQL 2000 中的一个问题,但我认为这个问题在 2005 年得到了解决。
0赞
Redbaron
8/20/2008
#2
8094 字节。
如果您列出有关您正在做的事情的更多信息,它可能有助于我们找出实际原因。
10赞
JeremiahClark
8/20/2008
#3
在 SQL 2000 中,行限制为 8K 字节,这与内存中的页面大小相同。
[编辑]
在 2005 年,页面大小相同 (8K),但数据库使用页面中行上的指针指向包含较大字段的其他页面。这使得 2005 能够克服 8K 行大小限制。
7赞
Kibbee
8/20/2008
#4
似乎抓住了很多人的问题是,你可以创建一个表,根据定义,它可以容纳超过 8K 的数据,并且它会很好地接受它。该表将正常工作,直到您实际尝试在表中插入超过 8K 的数据。
因此,假设您创建了一个表,其中包含一个用于主键的整数字段和 10 个 varchar(1000) 字段。该表在大多数情况下都可以正常工作,因为您填满所有 10 个 varchar(1000) 字段的次数很少。Howerver,即使您尝试在每个字段中放置 1000 个字符,它也会给您带来此问题中提到的错误。
评论
0赞
TheSmurf
8/20/2008
@Erik Kibbee:是的,我们有几个表格的行太大了。我已经多次提出这个问题(我们的数据库绝对是一团糟),但它是一家公司商店,没有人愿意听到结构性问题。从表面上看,NHibernate实际上已经向我们隐瞒了一段时间。但是今天一切都在删除电话(所有事情)中爆炸了。
2赞
Kevin Albrecht
3/31/2010
#5
仅供参考,在数据库上运行此 SQL 命令可以解决问题,如果它是由删除可变长度列后需要回收的空间引起的:
DBCC CLEANTABLE (0,[dbo.TableName])
评论