sql-server – 不能创建一个大小为8937的行,大于允许的最大值806
我们在数据库中的表上收到此错误:
该表由约400个varchar(max)字段组成.但是,我们只将空字符串插入到这些字段中. 插入似乎工作,但是当使用SqlXml读取数据或在表的主键上运行DBCC DBREINDEX时,会发生错误. 它只发生在一个特定的SQL Server(2005)而不是其他(2005 Express)上.问题机器正在运行64位Windows,而其他机器正在运行32位窗口. 有人有任何想法吗?如果我需要包含更多信息,请通知我. 阅读了您的一些回应后,我想指出,我完全同意,这是非常非常,不寻常的,甚至没有任何理由尝试使用这个许多varchar(最大)列.有理由,主要不在我的控制之下,我不会进入这里. 解决方法该错误是由于不能在SQL Server中大于8KB(大小为1页)的行,因为行不允许跨页 – 它是SQL Server的基本限制,您可以在此处阅读更多信息:> Database Basics Quick Note – The difference in Varchar and Nvarchar data types 请注意,SQL服务器将允许您创建表,但是如果您尝试实际插入跨多个页面的数据,那么它将给出上述错误. 当然这并不完全相同,因为如果以上是真相,那么单个VARCHAR(8000)列会在表中填满一行! (以前是这种情况). SQL Server 2005解决了这一限制,允许将一行中的某些数据存储在另一个页面中,而不是使用24位指针.你可以在这里阅读: > How Sql Server 2005 bypasses the 8KB row size limitation 现在可以看到,这意味着行现在可以跨多个页面,但单列行仍然需要适合单个页面(因此列的最大大小为VARCHAR(8000)),并且总共仍然有一个限制你可以拥有这样的列数(约8000/24 =我估计约300) 当然,这一切都是缺点的一个主要问题,那就是一张桌子上的400个宽柱是荒谬的! 您应该对数据库模式进行长时间的考察,并提出更合理的方法 – 您可以从列大小(如VARCHAR(255)或VARCHAR(50))中选择一些更保守的估计值,但是您真的需要拆分一些这些领域分成不同的表格. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |