2

私は立ち往生していて、理解できません。誰にもアイデアはありますか?助けていただければ幸いです。

次の定義を持つ SQL Server 2008 のテーブルがあります。

エラーなしで挿入/削除/更新できます。ただし、1 つの項目を除外する select ステートメントを実行すると、次のエラーが発生しました。

メッセージ 511、レベル 16、状態 1、行 1 許容最大行サイズ 8060 を超えるサイズ 8104 の行を作成できません。

where条件を削除すると、正常に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 クリーンアップを実行してテーブルを再作成すると消えます。現在は戻ってきていますが、今回は 2 つ以上の基準を選択した場合のみです。問題は、私の製品を除外する where 条件にあるようです。製品テーブルに nvarchar または varbinary がありません。私はとてもイライラしています... :-(

4

2 に答える 2

0

クエリを変更して IN 句を削除し、追加の結合または WHERE EXISTS に置き換えることをお勧めします。これにより、発生している問題を回避する、より効率的なクエリ プランが生成される場合があります。

于 2013-09-23T23:58:51.983 に答える
0

物理データ サイズが 8060 未満の場合も、このエラーが発生します。次のコマンドを試してください。

DBCC CLEANTABLE

例えば:

DBCC CLEANTABLE (Databasename,'tablename', 0)
WITH NO_INFOMSGS;
于 2016-02-18T13:33:20.927 に答える