SQL Server 2008 R2のインデックスビューでの列タイプの理解
-
10-10-2019 - |
質問
このようなSQLによるインデックスビューを作成しました。
Select Table1_ID, Count_BIG(*) as Table2TotalCount from Table2 inner join
Table1 inner join... where...
また、ビューを作成した後、列table1_idにクラスター化された一意のインデックスを設定します。
したがって、ビューは2つの列で構成されています。
Table1_ID
Table2TotalCount
2つの質問があります。
- 使用する場合
Count(1)
またCount_BIG(1)
それ以外のCount_BIG(*)
, 、SQLはTable1_idにインデックスを設定することを許可しません - 2番目の列のタイプをどのように制御できますか(
Table2TotalCount
) - sql give a 長いヌル可能 この列に入力します。しかし、私たちは設定したいです nullableではありません この列に入力します。ビューを作成した後、列タイプを変更する方法が見つかりません。また、ビューを作成するために使用するT-SQL、常にint値をに返します table2totalcount.
解決
count_big(*)を使用する必要があります。それは制限の1つです インデックス付きビューの作成:
ビュー内のSelectステートメントには、次のTransact-SQL構文要素を含めることはできません。
- count(count_big(*)が許可されています。)
インデックス化されていない2番目のビューを作成し、この最初のビューを参照し、カウント列のデータ型を目的のタイプにキャストすることができます(そして、おそらくiSnull()を使用して、nullableプロパティを防止します)
他のヒント
それはおそらくあなたがフィールドの代わりに表現を頼りにしているからです
*
. 。使用count(1)
と同じ結果を与えますcount(*)
, 、つまり、レコードの数を数えるので、使用する理由はありませんcount(1)
.使用する
count
それ以外のcount_big
取得するためint
それ以外のbigint
(長さ)。 (ドキュメントには、それらの唯一の違いはリターンタイプであると具体的に述べています。)なぜ値がNullableである理由がわかりません。count
nullを返すことはありませんが、それはすべての集合体で同じである可能性があり、おそらく制御することはできません。
所属していません StackOverflow