Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 包含过去两周数据的索引视图_Sql Server_Tsql_Indexed View - Fatal编程技术网

Sql server 包含过去两周数据的索引视图

Sql server 包含过去两周数据的索引视图,sql-server,tsql,indexed-view,Sql Server,Tsql,Indexed View,我正在尝试创建只包含过去两周数据的索引视图 这部分很好: CREATE VIEW [dbo].[MainLogView] WITH SCHEMABINDING AS SELECT Id, Date, System, [Function], StartTime, EndTime, Duration, ResponseIsSuccess, ResponseErrors FROM dbo.MainLog WHERE (Date >= DATEAD

我正在尝试创建只包含过去两周数据的索引视图

这部分很好:

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()))
但当我尝试添加索引时:

CREATE UNIQUE CLUSTERED INDEX IDX_V1 
    ON MainLogView (Id);
我想:

无法在视图“dbo.MainLogView”上创建索引。函数“getdate” 产生不确定的结果。使用确定性系统函数, 或者修改用户定义的函数以返回确定性结果

我知道原因,但如何减少过去两周的数据? 我需要从我的表中快速查询一小部分数据

您可以(我想,但我没有索引视图的实际经验)创建一个单记录表(一个实际的表,因为索引视图中不允许有视图),并用当前日期(14天)填充。您可以随时更新此表;或者手动,用触发器或者其他聪明的机制。您可以使用该表进行联接,实际上可以用作过滤器

当然,在查询视图时,必须确保首先更新“currentDate”表

你会得到这样的结果:

CREATE VIEW [dbo].[MainLogView]
WITH SCHEMABINDING
AS
SELECT        Id, Date, System, [Function], StartTime, EndTime, Duration, ResponseIsSuccess, ResponseErrors
FROM            dbo.MainLog ML
INNER JOIN      dbo.CurrentDate CD
           ON   ML.Date >= CD.CurrentDateMin14Days

(完全未经测试,可能不起作用……这基本上是一种黑客行为,我根本不确定索引视图是否能提高性能。使用常规视图可能会更好。)

你不能。索引视图的维护是通过对基表的触发器有效地执行的,并且完全基于受这些基表上的单个操作(因此它们的所有限制)影响的行。过去两周需要一些替代的维护机制,这在SQL Server中是不存在的。为什么要在上创建索引ID@TheGameiswar因为我想测试一下。第一柱。在这种情况下,它可以忽略不计。因为它不起作用。如果mainlog是一个表,为什么不在dateadd函数上创建一个索引,并在视图中使用select?@TheGameiswar我需要类似于oracle中materializedview的东西。我希望从视图中获取数据而不影响MainLog。并每天刷新视图中的数据一次。聪明,我将测试它。工作,创建索引;-)我必须对它进行更复杂的测试。@BWA Cool,别忘了检查性能。你最好用一种不太老套的方法。