2013-08-12 3 views
2

Я застреваю, и я не могу понять. У кого-нибудь есть идеи? Я был бы очень признателен за любую помощь.Максимальный размер строки 8060 Ошибка

У меня есть таблица в SQL Server 2008 со следующим Defintion:

Я могу вставить/удалить/обновить без каких-либо ошибок. Однако, когда я запустить оператор выбора, который отфильтровывает ONE один элемент, я получил следующее сообщение об ошибке:

Msg 511, Level 16, State 1, Line 1 Cannot create a row of size 8104 which is greater than the allowable maximum row size of 8060.

Если я удалить, где состояние a15.MEMBER_PARENT_LEVEL_ID4 in (91329) он побежал отлично. Если я добавлю 5 или 10 критериев, он будет работать нормально, в том числе тот, который бросает ошибку, если вы добавите ее самостоятельно.

[MSTR_PROD_HIER_ID] [int] NOT NULL, 
[MSTR_PROD_HIER_DESC] [varchar](50) NULL, 
[MEMBER_GROUP_LEVEL_ID1] [int] NULL, 
[MEMBER_GROUP_LEVEL_DESC1] [varchar](60) NULL, 
[MEMBERKEY_SORT1] [int] NULL, 
[MEMBER_GROUP_LEVEL_ID2] [int] NULL, 
[MEMBER_GROUP_LEVEL_DESC2] [varchar](60) NULL, 
[MEMBERKEY_SORT2] [int] NULL, 
[MEMBER_GROUP_LEVEL_ID3] [int] NULL, 
[MEMBER_GROUP_LEVEL_DESC3] [varchar](60) NULL, 
[MEMBERKEY_SORT3] [int] NULL, 
[MEMBER_LEVEL_ID4] [int] NULL, 
[MEMBER_LEVEL_DESC4] [varchar](60) NULL, 
[MEMBER_LEVEL_DESC4_1] [varchar](60) NULL, 
[MEMBER_PARENT_LEVEL_ID1] [int] NOT NULL, 
[MEMBER_PARENT_LEVEL_DESC1] [varchar](60) NULL, 
[SORT1] [int] NULL, 
[MEMBER_PARENT_LEVEL_ID2] [int] NULL, 
[MEMBER_PARENT_LEVEL_DESC2] [varchar](60) NULL, 
[SORT2] [int] NULL, 
[MEMBER_PARENT_LEVEL_ID3] [int] NULL, 
[MEMBER_PARENT_LEVEL_DESC3] [varchar](60) NULL, 
[SORT3] [int] NULL, 
[MEMBER_PARENT_LEVEL_ID4] [int] NULL, 
[MEMBER_PARENT_LEVEL_DESC4] [varchar](60) NULL, 
[SORT4] [int] NULL, 
[CLASS_DESC] [varchar](60) NULL, 
[CLASS_DESC1] [varchar](50) NULL, 
[TOTAL_BRAND_IND] [int] NOT NULL 
} 


{ 
select a11.PlanFormat PlanFormat, 
max(a18.FormatName) FormatName, 
a15.MEMBER_PARENT_LEVEL_ID2 MEMBER_PARENT_LEVEL_ID2, 
max(a15.MEMBER_PARENT_LEVEL_DESC2) MEMBER_PARENT_LEVEL_DESC2, 
a15.MEMBER_PARENT_LEVEL_ID3 MEMBER_PARENT_LEVEL_ID3, 
max(a15.MEMBER_PARENT_LEVEL_DESC3) MEMBER_PARENT_LEVEL_DESC3, 
a15.MEMBER_PARENT_LEVEL_ID4 MEMBER_PARENT_LEVEL_ID4, 
max(a15.MEMBER_PARENT_LEVEL_DESC4) MEMBER_PARENT_LEVEL_DESC4, 
max(a15.CLASS_DESC) CLASS_DESC, 
max(a15.CLASS_DESC1) CLASS_DESC1, 
a16.MSTR_SEASON_ID MSTR_SEASON_ID, 
max(a16.MSTR_SEASON_DESC) MSTR_SEASON_DESC, 
max(a16.MSTR_SEASON_DESC1) MSTR_SEASON_DESC1, 
a17.MSTR_STORE_ID MSTR_STORE_ID, 
max(a17.MSTR_STORE_DESC1) MSTR_STORE_DESC1, 
a13.MSTR_C_MNTH_ID MSTR_C_MNTH_ID, 
max(a13.MSTR_C_MNTH_DESC) MSTR_C_MNTH_DESC, 
a13.MSTR_CALENDAR_GRP_ID MSTR_CALENDAR_GRP_ID, 
max(a13.MSTR_CALENDAR_GRP_DESC) MSTR_CALENDAR_GRP_DESC, 
a12.YEAR_NBR YEAR_NBR, 
a11.PlanNo PlanNo, 
max(a18.PlanName) PlanName, 
sum((a11.Value1821/1000.0)) ACT_PROJ_SLS_DOL 
from A_MSTR_PLAN_FCT a11 
join A_MSTR_CALENDAR_MONTH_XREF a12 
on  (a11.Member2 = a12.Member2) 
join A_MSTR_CALENDAR_MONTH a13 
on  (a12.DIM_TIME_ID = a13.DIM_TIME_ID and 
a12.YEAR_NBR = a13.YEAR_NBR) 
join A_MSTR_PRODUCT_LEVEL_3 a14 
on  (a11.MEMBER0 = a14.P_MEMBER3) 
join A_MSTR_PRODUCT_LEVEL_3_PARENT a15 
on  (a14.MEMBER_LEVEL_ID4 = a15.MEMBER_LEVEL_ID4 and 
a14.MSTR_PROD_HIER_ID = a15.MSTR_PROD_HIER_ID) 
join A_MSTR_SEASONALITY a16 
on  (a11.MEMBER3 = a16.MEMBER3) 
join A_MSTR_STORE a17 
on  (a11.MEMBER1 = a17.MEMBER1) 
join A_MSTR_PLAN a18 
on  (a11.PlanNo = a18.PlanNo and 
a12.YEAR_NBR = a18.YEAR_NBR and 
a13.YEAR_ID = a18.YEAR_ID) 
where (a11.PlanNo in (1547) 
and a15.MEMBER_PARENT_LEVEL_ID4 in (91329)) 
group by a11.PlanFormat, 
a15.MEMBER_PARENT_LEVEL_ID2, 
a15.MEMBER_PARENT_LEVEL_ID3, 
a15.MEMBER_PARENT_LEVEL_ID4, 
a16.MSTR_SEASON_ID, 
a17.MSTR_STORE_ID, 
a13.MSTR_C_MNTH_ID, 
a13.MSTR_CALENDAR_GRP_ID, 
a12.YEAR_NBR, 
a11.PlanNo 
} 

Это продолжение. к моему предыдущему сообщению. Как я уже упоминал ниже, эта ошибка уходит после того, как я сбросил таблицу, выполните очистку DBCC и заново создадим таблицу. Теперь он возвращается, но на этот раз, только когда вы выбираете два или более критерия. Проблема, похоже, связана с тем условием, когда он отфильтровывает мой продукт. В моей таблице продуктов нет ни nvarchar, ни varbinary. Я так расстроен ... :-(

+0

это может дать вам понимание: http://stackoverflow.com/questions/7631546/entity-framework-row-size-greater-than-allowable-maximum-row-size-of-8060 –

+0

thank jyparask ... this был полезен. Хотя моя проблема несколько отличается, это дало мне представление. Я могу вставлять данные в свои таблицы. Это не связано с какой-либо ошибкой. Я сбросил 10 столбцов, 7 INT и 3 VARCHAR. Затем я запустил DBCC CLEANTABLE и проверил результаты. Странно, что мое среднее пространство, используемое в%, увеличилось на ~ .5% с 95.3 до 96.4521868050408, и запрос выполнялся без этой ошибки. Это произошло только при выборе определенных значений. Фактические данные короче записи с максимальной длиной. Еще раз большое спасибо. – user2642833

+0

Почему ** выберите ** сбой с этой ошибкой ?! Это ошибка DML. Вы уверены, что это точное утверждение является причиной? Вы понимаете, почему это не может быть причиной? – usr

ответ

0

Я бы предложил изменить запрос, чтобы удалить предложения IN и заменить его дополнительными объединениями или WHERE EXISTS. Это может создать более эффективный план запроса, который позволяет избежать проблема вы видите

0

Если физический размер данных меньше, чем 8060, то вы тоже получаете эту ошибку, попробуйте следующую команду

DBCC CLEANTABLE 

Например:..

DBCC CLEANTABLE (Databasename,'tablename', 0) 
WITH NO_INFOMSGS; 
Смежные вопросы