2010-12-10 40 views
0

Je veux créer vue indexée avec un tel t-sql:problème avec la création Indexed Affichage et GROUP BY dans SQL Server 2008 R2

Select 
    Table1_ID, 
    cast(CONVERT(varchar(8), 
    t2.Object_CreationDate, 112)AS DateTime) as Object_CreationDate , 
    Count_BIG(*) as ObjectTotalCount 
    from 
     [dbo].Table2 t2 inner join [dbo].Table1 t1 on ... 
    Group BY 
     Table1_ID, CONVERT(varchar(8), t2.Object_CreationDate, 112)) 

Je dois faire un groupe par que par datepart de la colonne Object_CreationDate (type datetime2).

Je souhaite également définir l'index sur les colonnes Theme_Id et Object_CreationDate dans la vue dérivée.
Si j'utilise cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime) dans SELECT - je vais avoir des problèmes avec l'index sur cette colonne. Parce que cette colonne (Object_CreationDate) n'est pas déterministe.

Je me demande s'il est possible de résoudre un problème.

Répondre

3

REPLACE ...

CONVERT(varchar(8), t2.Object_CreationDate, 112)) 

... avec

DATEADD(day, DATEDIFF(day, 0, t2.Object_CreationDate), 0) 
--OR 
CAST(t2.Object_CreationDate AS date) 

Le 2ème est le format SQL Server 2008+ uniquement, le 1er est plus générale

Cela supprime la composante temporelle à partir d'une valeur datetime dans le domaine datatype date/datetime sans aucun format intermédiaire datetime dépendant des paramètres régionaux

Voir ces réponses: One et Two(comments)

+0

Merci, ça aide. Mais quand j'essaye de mettre l'index avec la commande créer l'index unique IX_Theme_ID_Object_CreationDate sur [Vue] (Theme_ID, Object_CreationDate) - sql donne une erreur qui parce que je n'ai pas l'index groupé unique sur cette vue, je ne peux pas ajouter cet index. –

+0

Vous devez identifier un "index cluster unique" exactement comme indiqué dans le message d'erreur. peut-être "Table1_ID". De quelle autre manière SQL Server saura-t-il quelle ligne est quoi s'il n'y a pas de clé unique pour le viw indexé? – gbn

+0

ok, merci, je comprends –