Ich versuche eine indizierte Sicht zu erstellen, die nur die Daten der letzten zwei Wochen enthält.Indexierte Ansicht mit Daten der letzten zwei Wochen
Dieses Teil funktioniert gut:
CREATE VIEW [dbo].[MainLogView]
WITH SCHEMABINDING
AS
SELECT Id, Date, System, [Function], StartTime, EndTime, Duration, ResponseIsSuccess, ResponseErrors
FROM dbo.MainLog
WHERE (Date >= DATEADD(day, - 14, GETDATE()))
Aber wenn ich versuche hinzufügen Index:
CREATE UNIQUE CLUSTERED INDEX IDX_V1
ON MainLogView (Id);
Ich bin geting:
Kann nicht Index auf Sicht erstellen ‚dbo.MainLogView ". Die Funktion 'getdate' liefert nichtdeterministische Ergebnisse. Verwenden Sie eine deterministische Systemfunktion, , oder ändern Sie die benutzerdefinierte Funktion, um deterministische Ergebnisse zurückzugeben.
Ich weiß, warum, aber wie die Daten in einer Ansicht für die letzten 2 Wochen zu reduzieren? Ich brauche kleine und schnell abrechenbare Daten aus meiner Tabelle.
Sie können nicht. Die Pflege einer indizierten Sicht wird effektiv durch Trigger gegen die Basistabellen durchgeführt und basiert ausschließlich auf den Zeilen, die von den einzelnen Aktionen in diesen Basistabellen betroffen sind (daher alle ihre Einschränkungen). Die letzten zwei Wochen erfordern einen alternativen Wartungsmechanismus, der in SQL Server nicht vorhanden ist. –
Warum erstellen Sie einen Index für ID – TheGameiswar
@TheGameiswar, weil ich es testen möchte. Erste Kolumne. In diesem Fall ist es vernachlässigbar. Beceuse es funktioniert nicht. – BWA