質問

このようなSQLによるインデックスビューを作成しました。

Select Table1_ID, Count_BIG(*) as Table2TotalCount from Table2 inner join
Table1 inner join... where...

また、ビューを作成した後、列table1_idにクラスター化された一意のインデックスを設定します。
したがって、ビューは2つの列で構成されています。

Table1_ID
Table2TotalCount

2つの質問があります。

  1. 使用する場合 Count(1) また Count_BIG(1) それ以外の Count_BIG(*), 、SQLはTable1_idにインデックスを設定することを許可しません
  2. 2番目の列のタイプをどのように制御できますか(Table2TotalCount) - sql give a 長いヌル可能 この列に入力します。しかし、私たちは設定したいです nullableではありません この列に入力します。ビューを作成した後、列タイプを変更する方法が見つかりません。また、ビューを作成するために使用するT-SQL、常にint値をに返します table2totalcount.
役に立ちましたか?

解決

count_big(*)を使用する必要があります。それは制限の1つです インデックス付きビューの作成:

ビュー内のSelectステートメントには、次のTransact-SQL構文要素を含めることはできません。

  • count(count_big(*)が許可されています。)

インデックス化されていない2番目のビューを作成し、この最初のビューを参照し、カウント列のデータ型を目的のタイプにキャストすることができます(そして、おそらくiSnull()を使用して、nullableプロパティを防止します)

他のヒント

  1. それはおそらくあなたがフィールドの代わりに表現を頼りにしているからです *. 。使用 count(1) と同じ結果を与えます count(*), 、つまり、レコードの数を数えるので、使用する理由はありません count(1).

  2. 使用する count それ以外の count_big 取得するため int それ以外の bigint (長さ)。 (ドキュメントには、それらの唯一の違いはリターンタイプであると具体的に述べています。)なぜ値がNullableである理由がわかりません。 count nullを返すことはありませんが、それはすべての集合体で同じである可能性があり、おそらく制御することはできません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top