Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法创建大于8060的行(此错误消息为wierd情况)_Sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql 无法创建大于8060的行(此错误消息为wierd情况)

Sql 无法创建大于8060的行(此错误消息为wierd情况),sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我收到一个错误“无法创建大于允许的最大行大小8060的8766行” 这种情况发生在一个有很多列的查询中,大约300列,大多数类型为“int”或“float”。此查询计算具有31列(每天一列)的人力资源管理报告。在这里发布此查询可能会占用太多空间,但如果您坚持,我可以。我确信300列浮点(4甚至8字节)和一些varchar永远不应该超过8060字节。尽管如此,错误还是发生了。问题是,它发生的方式很奇怪 在该查询的第一级中,它看起来像这样: select Title, K0Present, K1

我收到一个错误“无法创建大于允许的最大行大小8060的8766行”

这种情况发生在一个有很多列的查询中,大约300列,大多数类型为“int”或“float”。此查询计算具有31列(每天一列)的人力资源管理报告。在这里发布此查询可能会占用太多空间,但如果您坚持,我可以。我确信300列浮点(4甚至8字节)和一些varchar永远不应该超过8060字节。尽管如此,错误还是发生了。问题是,它发生的方式很奇怪

在该查询的第一级中,它看起来像这样:

select  
Title,
K0Present, K1Present, K2Present,
HT,K0_T,
case when bla bla then bla bla when bla bla then bla bla end as Y01,
case when bla bla then bla bla when bla bla then bla bla end as Y02
...
case when bla bla then bla bla when bla bla then bla bla end as Y31
from
(_inner_query_)
order by Title
现在,内部查询大约有300列。在外部查询中,我们有37列。它会导致错误消息

但是,如果我将其更改为:

select  
*,
case when bla bla then bla bla when bla bla then bla bla end as Y01,
case when bla bla then bla bla when bla bla then bla bla end as Y02
...
case when bla bla then bla bla when bla bla then bla bla end as Y31
from
(_inner_query_)
order by Title
错误信息消失了!即使现在输出窗口中还有大约300个Coulmn


我如何解决这个问题?我一点儿也不知道。也许查询优化器中有一些奇怪的东西?也许它不知道怎么优化了我的查询

您可以调查哪一列是问题。尝试逐列选择

select  
Title,
*
case when bla bla then bla bla when bla bla then bla bla end as Y01,
case when bla bla then bla bla when bla bla then bla bla end as Y02
...
case when bla bla then bla bla when bla bla then bla bla end as Y31
from
(_inner_query_)
order by Title
然后

等等


ORDER BY可能有问题。请尝试执行不带查询的查询。这可能会帮助您

如果您的物理数据大小小于
8060
,但仍然出现此错误,请尝试以下命令

DBCC CLEANTABLE for example, DBCC CLEANTABLE (Databasename,'tablename', 0) WITH NO_INFOMSGS;

我假设这只是一个选择,而不是一个插入,在这种情况下,这可能是由计划中的排序引起的,并且对查询的更改以不再需要的方式更改了计划。您可以发布确切的错误吗?正如我所说,确切的错误是“无法创建一个大于允许的最大行大小8060的8766行”
DBCC CLEANTABLE for example, DBCC CLEANTABLE (Databasename,'tablename', 0) WITH NO_INFOMSGS;