Frage

Wir haben eine indizierte Sicht durch eine solche SQL:

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

Auch nach der Erstellung der Ansicht, setzen wir gruppierten eindeutigen Index für Spalte Table1_ID.
So Ansicht besteht aus zwei Spalten:

Table1_ID
Table2TotalCount

Wir haben zwei Fragen:

  1. Wenn wir Count(1) oder Count_BIG(1) statt Count_BIG(*) verwenden, SQL erlaubt uns nicht zu Satz-Index auf Table1_ID
  2. Wie können wir die Art der zweiten Säule steuern (Table2TotalCount) - SQL give a lange Nullable in dieser Spalte eingeben. Aber wir wollen Satz int nicht auf NULL festlegbare Typ dieser Spalte. Nach Ansicht erstellen, können wir finden jede mögliche Weise nicht Spaltentyp zu ändern. Auch T-SQL wir für die Erstellung Ansicht verwenden, immer int Werte zu Table2TotalCount .
War es hilfreich?

Lösung

Sie haben COUNT_BIG zu verwenden (*). Es ist eine der Einschränkungen auf eine indizierte Sicht erstellen :

Die SELECT-Anweisung in der Ansicht kann nicht die folgenden Transact-SQL-Syntaxelemente enthalten:

  • COUNT (COUNT_BIG (*) erlaubt ist.)

Sie könnten eine zweite Ansicht zu erstellen, die nicht indiziert ist, dass die Referenzen dieser erste Blick, und wirft den Datentyp der Zählspalte auf die gewünschte Art (und möglicherweise verwendet einen ISNULL (), um die Nullable-Eigenschaft zu verhindern)

Andere Tipps

  1. Das ist wahrscheinlich, weil Sie auf einem Ausdruck anstelle eines Feldes oder * zählen. Mit count(1) dem gleichen Ergebnis wie count(*) gibt, das heißt die Anzahl der Datensätze zu zählen, so gibt es keinen Grund zur Verwendung count(1).

  2. Verwenden count statt count_big int zu bekommen statt bigint (lang). (Die Dokumentation sagt ausdrücklich, dass der einzige Unterschied zwischen ihnen ist der Rückgabetyp.) Ich weiß nicht, warum der Wert NULL sein kann als count nie null zurück, aber das könnte das gleiche für alle Aggregate sein, und wahrscheinlich nicht möglich Kontrolle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top