create table test1(
id int,
name varchar(30)
);create table test2(
id int,
value varchar(30)
);insert into test1(id,name)values(1,'A');
insert into test1(id,name)values(2,'B');
insert into test1(id,name)values(3,'C');insert into test2(id,value)values(1,'111');
insert into test2(id,value)values(2,'222');
insert into test2(id,value)values(3,'333');create view testMV WITH SCHEMABINDING as
select a.id,a.name,b.value from test1 a inner join test2 b on a.id=b.id
报了个“
无法将 视图 'testMV' 绑定到架构,因为名称 'test1' 对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。
”这样的错。请问如何创建?还有些问题,oracle里物化视图有on demand,on commit方式,请问sql server里有对应的创建方式吗?顺便问一下oracle里面的on demand是怎么驱动物化视图更新数据的?谢谢!sql server里如果也有on demand,那它怎么驱动更新的?对了,还有个,oracle里面还有个refresh fast这是什么方式创建物化视图的,怎么驱动更新数据的?5个问题,分不够再加!谢谢各位!

解决方案 »

  1.   

    因为名称 'test1' 对于架构绑定无效。名称必须由两部分构成,并且对象不能引用自身。 
    ---
    FROM 架构名.表名
    -----
    默认为dbo架构.FROM dbo.表名
      

  2.   

    是不是固态视图?好像sql server企业版才支持的
      

  3.   


    很好,谢谢不过怎么我一更新test1,这个物化视图马上就更新了?有没有 oracle里面on demand方式?
      

  4.   

    没用过Oracle,不过SQL可以为视图做Instead of触发器来插入,更新与删除的操作.
      

  5.   


    如果你更新test1的时候.更新的列在这个视图上.
    那当然也要维护这个索引上的相关的数据.
      

  6.   


    不是很明白,这样的话那和普通视图有分别?我如果想做个快照,类似Oracle里面on Demand方式,手动去更新这个物化视图,怎么做呢?
      

  7.   

    普通的视图是个逻辑概念..不会额外的使用存储空间去存储数据.而是在执行这个视图的时候.去编译这个视图的SQL语句执行.而物化视图是个物理概念..会占用存储空间去存储数据.而访问这个视图的时候.只需要到这个位置去寻找数据即可.比如我一张表里存储了30多个省,自治区一年来每天降雨量的数据..有2000万条记录.
    我要做一个报表统计这30多个省,自治区这一年的这个数据的平均值.如果我做一个普通的视图.那我每次访问时,都要在这2000万条记录中去计算.如果我做了一个物化视图.因为这个数据已经物理的存储了.
    所以我访问这个物化视图时,只要访问30多条记录即可.-------
    如果我更新了这个数据中.某一天的降雨量.
    那么如果不同时更新这个视图,那么就会得到一个不一致的状态了.
    当然这个更新是SQL SERVER内部完成的.
      

  8.   

    当然我不了解oracle.所以你一直说的类似Oracle里面on Demand方式.不明白.
      

  9.   


    就是说物化视图其实是个快照,平时不改变,只有你驱动它时(on demand),才会更新数据oracle里有fast,complete等多种方式,fast是增量更新。这个东西很有用,比如查询要一两个小时的那种sql,平时更新数据是个batch job,用户访问时,由于不需要实时,因此返回昨天的快照就可以(物化视图同步更新的数据也是比较慢的),这样很快能返回结果。
      

  10.   


    我倒了,就是说sql server的物化视图就是on conmmit实时提交的方式了,如果更新的数据多,这个视图更新也很慢的啊。
      

  11.   


    是的..物化视图会很影响DML的操作..如果是OLTP慎用物化视图.
      

  12.   


    create view testMV WITH SCHEMABINDING as
    select a.id,a.name,b.value from test1 a inner join test2 b on a.id=b.id要绑定架构create view testMV WITH SCHEMABINDING as
    select a.id,a.name,b.value from dbo.test1 a inner join dbo.test2 b on a.id=b.id