Question

Nous avons créé une vue indexée par cette sql:

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

En outre une fois la vue, nous avons mis sur index unique regroupé colonne Table1_ID.
Alors Voir se compose de deux colonnes:

Table1_ID
Table2TotalCount

Nous avons deux questions:

  1. Si nous utilisons Count(1) ou Count_BIG(1) au lieu de Count_BIG(*), SQL ne nous permet pas d'indexer ensemble sur Table1_ID
  2. Comment peut-on contrôler le type de la seconde colonne (Table2TotalCount) - SQL donner un   longue annulable tapez à cette colonne. Mais nous voulons ensemble int nullable pas de type à cette colonne. Après avoir créé View, nous ne pouvons pas trouver un moyen de changer le type de colonne. Aussi t-sql que nous utilisons pour créer vue, revenir toujours des valeurs int Table2TotalCount .
Était-ce utile?

La solution

Vous devez utiliser COUNT_BIG (*). Il est l'une des restrictions sur la création d'une vue indexée :

  

L'instruction SELECT dans la vue ne peut pas contenir les éléments de syntaxe Transact-SQL suivantes:

     
      
  • COUNT (COUNT_BIG (*) est autorisée.)
  •   

Vous pouvez créer un second point de vue qui ne sont pas indexées, que les références de cette première vue, et jette le type de données de la colonne de comptage à votre type désiré (et utilise éventuellement un ISNULL () pour empêcher la propriété annulable)

Autres conseils

  1. C'est probablement parce que vous comptez sur une expression au lieu d'un champ ou *. L'utilisation count(1) donne le même résultat que count(*), à savoir compter le nombre d'enregistrements, donc il n'y a aucune raison d'utiliser count(1).

  2. Utilisez count au lieu de count_big pour obtenir int au lieu de bigint (long). (La documentation dit expressément que la seule différence entre eux est le type de retour.) Je ne sais pas pourquoi la valeur est annulable comme count ne retourne jamais nulle, mais cela pourrait être la même pour tous les agrégats, et sans doute pas possible de contrôler.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top