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

标签 sql-server-2008-r2

我有 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/

相关文章:

sql - sql中如何连接两个不相关的表

c# - 从跨域的 C# 应用程序运行 SQL 脚本

SQL Server - 高级分组

SQL存储过程-删除与输入列表匹配的每一行

sql-server - 具有多个数据库的 SSRS 报告

tsql - 将日期范围转换为每天记录的 SQL 查询

sql-server-2008 - 为什么在存储过程调用的参数之一上使用 CONVERT 会出错?

用于计算样本的最大值、最小值和众数的 SQL 查询

database - 如何设置 SQL Server Enterprise 进行分区

sql-server - 如何在 UPDATE 子句中使用 ROW_NUMBER()?