2010-12-10 22 views
0

Ich möchte mit indizierten Sicht um eine solche T-SQL:Problem mit dem Erstellen von indizierte Sicht und diese Gruppe von in 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)) 

Ich brauche Gruppe von nur durch Datumsteil der Spalte zu machen Object_CreationDate (Typ datetime2).

Auch ich möchte Index auf Spalten Theme_Id UND Object_CreationDate in der abgeleiteten Ansicht setzen.
Wenn ich cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime) in SELECT verwende - bekomme ich Probleme mit Index für diese Spalte. Weil diese Spalte (Object_CreationDate) nicht deterministisch ist.

Ich frage mich, ob es möglich ist, ein Problem zu lösen.

Antwort

3

replace ...

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

... mit

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

Das zweite Format ist SQL Server 2008+ nur ist der erste allgemeinere

Bestimmt die Zeitkomponente entfernt von einem Datetime-Wert in der date/datetime-Datentypdomäne ohne intermediäre locale-abhängige Datetime-Formate

Siehe diese Antworten: One und Two(comments)

+0

Danke, es hilft. Aber wenn ich versuche, Index mit Befehl zu setzen, erzeuge eindeutigen Index IX_Theme_ID_Object_CreationDate auf [Ansicht] (Theme_ID, Object_CreationDate) - sql geben einen Fehler, dass, weil ich keinen eindeutigen gruppierten Index für diese Ansicht habe, ich diesen Index nicht hinzufügen kann. –

+0

Sie müssen einen "eindeutigen gruppierten Index" genau identifizieren, wie die Fehlermeldung sagt. vielleicht "Table1_ID". Wie sonst wird SQL Server wissen, welche Zeile was ist, wenn es keinen eindeutigen Schlüssel für das indizierte viw gibt? – gbn

+0

ok, danke, ich verstehe –