SQL Server - Création d'un Schéma Lié à la Vue Indexée avec un courant GetDate filtre
Je veux créer la suite de la vue indexée:
CREATE VIEW [Cic].[vwMarker] WITH SCHEMABINDING
AS
Select
SubId,
marker.EquipmentID,
marker.ReadTime,
marker.CdsLotOpside,
marker.CdsLotBackside,
marker.CdteLotOpside,
marker.CdTeLotBackside
From dbo.Marker
Where dbo.Marker.ReadTime >= Convert(dateTime,'10/5/2011',120)
GO
CREATE UNIQUE CLUSTERED INDEX IX_vwMarker_ReadTime_EquipmentID
ON Cic.vwMarker (ReadTime, EquipmentID);
Cela fonctionne bien. Cependant, ce que je voudrais vraiment faire est d'inclure seulement les lignes dans cette vue que, deux jours ou plus récent, à compter de la date/heure actuelle la vue est interrogée. Je ne peux pas trouver un moyen de le faire parce que je ne peux pas utiliser la fonction GetDate() dans la Où le prédicat, car il est non-déterministe. En d'autres termes, j'aimerais faire quelque chose comme cela, mais ne peut pas:
Where dbo.Marker.ReadTime >= Convert(dateTime,DateAdd(dd,-2,GetDate()) ,120)
Est-il un moyen de contourner cela?
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, vous n'allez pas obtenir autour de la fonction déterministe pour la SCHEMABINDING exigence. Vous recevrez toujours l'erreur
Si le Marqueur est juste une seule table, je ne suis pas sûr qu'une vue indexée aurait tout avantage en matière de performances sur une vue normale à l'encontre de la table avec le même index cluster sur la table sous-jacente de
(ReadTime, EquipmentID)
Cependant, si "Marqueur" est lui-même un composite comme un
VIEW
, OU si vous ne souhaitez pas modifier l'Index Cluster sur le Marqueur de table, alors vous pourriez envisager quelque chose comme:GetDate
filtre.Sql Violon exemple ici
c'est à dire quelque Chose comme: