gpt4 book ai didi

sql-server-2008-r2 - SQL 2008 R2 超出行大小限制

转载 作者:行者123 更新时间:2023-12-02 00:33:31 25 4
gpt4 key购买 nike

我有 sql 2008 R2 数据库。我创建了一个表,当尝试针对它执行 select 语句(带有 order by 子句)时,我收到错误消息“无法创建大小为 8870 的行,该行大于允许的最大行大小 8060。”

我可以在没有 order by 子句的情况下选择数据,但是 order by 子句很重要,我需要它。我尝试了 ROBUST PLAN 选项,但仍然收到相同的错误。

我的表有 300 多列数据类型为 TEXT。我试过使用 varchar 和 nvarchar,但都没有成功。

有人可以提供一些见解吗?

更新:

感谢评论。我同意。一张表中有 300 多列不是很好的设计。我要做的是将 excel 选项卡作为数据表导入数据库。有些选项卡有 300 多列。

我首先使用 CREATE 语句创建一个基于 excel 选项卡的表,因此列会有所不同。然后在用数据创建表后,我在表上执行各种 SELECT、UPDATE、INSERT 等语句。

表的结构通常遵循以下模式:fkVersionID、RowNumber(autonumber)、Field1、Field2、Field3 等...

有什么方法可以绕过 8060 行大小限制吗?

最佳答案

您提到您尝试过 nvarchar 和 varchar ...请记住 nvarchar 使使用的字节数加倍,但在某些情况下它是两者中唯一支持外来字符的一个,例如重音符号。

如果可以适当限制其最大大小,varchar 是一个不错的选择。8000 个字符仍然是一个真正的限制,但如果平均每个 varchar 列不超过 26 个字符,你会没事的。您可以冒险使用 varchar 和 50char 长度,但平均每列仅使用 26 个字符。这意味着一列可能有 36 个字符长度,下一列可能有 16 个字符长度……然后您就可以了。 (只要您从不超过 300 列的平均每列 26 个字符。)

显然,字段数是动态的,并且有可能超过 8000 个字符的限制,这是 SQL 规范所注定的。您唯一的另一种选择是创建多个表,当您访问数据时,有一个唯一的键来连接适当的记录。因此,在您的 select 语句中,使用连接,然后从多个表中您可以处理 8000 + 8000 + ... 的行

所以这是可行的,但你必须使用 SQL 规则。

关于sql-server-2008-r2 - SQL 2008 R2 超出行大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5628529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com