打开“客户ABC销售一览表”,就会调用视图1,然后会弹出个选择的框,有三行可供选择:开始日期、结束日期、客户名称。
客户A、B、C这些数据量非常大,所以选择某一个客户时查找很慢,由于客户A的数据量也非常大,我现在想把客户A的数据建立在另外一个视图(客户A销售一览表),就是说视图中已经指定了是客户A,这样查找客户A也比较快,该怎样建立这个视图?是不是只能另外建立一个视图2,在视图1的基础上,里面添加一行where 客户=A,然后调用视图2?能不能在视图1中就能实现不输入客户名称,点击“客户A销售一览表”的时候,就自动调用有where 客户=A的语句,直接调用客户A的资料,从而提高查找速度呢?

解决方案 »

  1.   

    楼主参考~~http://book.51cto.com/art/200710/58165.htm
      

  2.   

    参考这个代码 你试试
    创建的视图索引
    CREATE VIEW [dbo].[V_SampleWatchLog_js] WITH SCHEMABINDING 
    AS 
    SELECT dbo.SampleWatchLog_FM.Id, dbo.SampleWatchLog_FM.SampleNo, 
          dbo.SampleWatchLog_FM.ChannelNo, 
          dbo.SampleWatchLog_FM.TeleViewDate AS TVWDate, 
          dbo.SampleWatchLog_FM.BeginTime AS TimeBegin, 
          dbo.SampleWatchLog_FM.EndTime AS TimeEnd, dbo.SampleWatchLog_FM.ON_OFF, 
          dbo.Sample.AreaCode, dbo.RightWeight.BevyCode, dbo.Sample.RightCode, 
          dbo.RightWeight.RightValue
    FROM dbo.SampleWatchLog_FM INNER JOIN
          dbo.Sample ON 
          dbo.SampleWatchLog_FM.SampleNo = dbo.Sample.SampleNO INNER JOIN
          dbo.RightWeight ON dbo.Sample.RightCode = dbo.RightWeight.RightCode AND 
          dbo.Sample.AreaCode = dbo.RightWeight.AreaCode
    创建了这个视图以后,一定要保证唯一性。
    注意:通过SCHEMABINDING属性,把表绑定了,如果对建视图的表进行删除操作的话,将会抱错。
      

  3.   

    在视图上创建的第一个索引必须是唯一聚集索引。在视图上创建聚集索引后,你就可以创建其他的非聚集索引了。视图必须使用SCHEMABINDING选项创建。因此,必须为对象名称使用两部分命名约定,并在SELECT列表中显式指定列的名称。如果视图中的查询对数据执行聚合,它的SELECT列表必须包含COUNT_BIG(*)聚合函数。COUNT_BIG与COUNT相同,只不过它的结果类型是BIGINT。该统计允许SQL Server跟踪每组被聚合的行数,并用于计算其他的聚合。会话中的一些SET选项必须是某一状态。要求和限制还有很多,更详细的信息请参考联机丛书。
      

  4.   


    加了with schemabinding后,运行错误:
    服务器: 消息 4512,级别 16,状态 3,过程 cust_sale,行 5
    无法将 视图 'cust_sale' 绑定到架构,因为名称 'sale' 对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。