我收到错误“无法创建大小为8766的行,该行大于允许的最大行大小8060.”
这发生在一个查询中,该列有很多列,大约300,大多数类型为“int”或“float”。此查询计算具有31列(每天一列)的HRM报告。在这里发布此查询可能会占用太多空间,但如果您坚持,我可以。我确信300列浮点(4或甚至8字节)和一些varchars不应超过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个coulmns!
我如何解决这个问题?我没有线索。也许查询优化器有些奇怪的东西?也许它以某种方式错误地优化了我的查询?
答案 0 :(得分:1)
如果您的物理数据大小小于8060
但仍然出现此错误,请尝试以下命令。
DBCC CLEANTABLE for example, DBCC CLEANTABLE (Databasename,'tablename', 0) WITH NO_INFOMSGS;
答案 1 :(得分:-1)
您可以调查哪个列有问题..按列选择列
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
然后
select
K0Present,
*
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..try执行查询而不是它。这可以帮助你https://msdn.microsoft.com/en-us/library/ms143432(v=sql.120).aspx