1

これは非常に不自然な例だと思いますが、フルバージョンを次のように簡略化して問題を示しています。

CREATE VIEW model.Appointments_Partition1
WITH SCHEMABINDING AS
  SELECT CONVERT(varchar(15), AppointmentId) as Id, 
         ap.AppTypeId as AppointmentTypeId, 
         ap.Duration as DurationMinutes, 
         ap.AppointmentId as EncounterId, 
         COUNT_BIG(*) as __count_big
    FROM dbo.Appointments ap 
    JOIN dbo.PracticeCodeTable pct ON SUBSTRING(pct.Code, 1, 1) = ap.ScheduleStatus 
                                  AND pct.ReferenceType = 'AppointmentStatus' 
   WHERE ap.AppTime > 0
GROUP BY CONVERT(varchar(15), AppointmentId), ap.AppTypeId, ap.Duration, ap.AppointmentId

CREATE UNIQUE CLUSTERED INDEX [IX_Appointments_Partition1_Id]
ON model.Appointments_Partition1 ([Id]);

私は得る:

メッセージ8668、レベル16、状態0、行12
ビューの選択リストに集計関数またはグループ化列の結果に関する式が含まれているため、ビュー'PracticeRepository.model.Appointments_Partition1'にクラスター化インデックス'IX_Appointments_Partition1_Id'を作成できません。集計関数またはグループ化列の結果の式を選択リストから削除することを検討してください。

count_bigを含めています...それで、group byに問題があるのはなぜですか?....そしてエラーを解決するにはどうすればよいですか?

4

2 に答える 2

5

ブール論理が適用された同じエラーメッセージを次に示します。

ビューの選択リストにグループ化列の式が含まれているため、ビュー'...'にクラスター化インデックス'...'を作成できません。選択リストからグループ化列の式を削除することを検討してください。

CONVERTを削除する必要がありますCONVERT(varchar(15), AppointmentId)

于 2011-11-18T06:34:54.673 に答える
-1

私はブログの1つでこの理由を見つけました、私には合理的なようです

いいえ、集計があるビューでスキーマバインディングを使用することはできません。また、スキーマバインディングを使用しない限り、ビューにインデックスを付けることはできません。また、外部結合または左結合を使用するインデックスをバインドすることはできません。基本的に、バインドできるのは単純なselectステートメントを含むビューのみです。

http://www.tek-tips.com/viewthread.cfm?qid=1401646

ブログを調べて、シナリオと完全に一致するかどうかを確認できます。

http://technet.microsoft.com/en-us/library/cc917715.aspx

ビューにインデックスを作成する場合は、スキーマバインディングを使用してビューを作成する必要があります。上記のリンクで、詳細に説明されています。設計上の考慮事項のセクションを通過します

于 2011-11-18T05:20:08.003 に答える