请教关于视图的两个初级问题
1.如果连接两个基表,比如:
select a.*,b.*
from a inner join b on (a.id=b.id)
不行, 必须要加上 top n 呢?比如:
select top 100 a.*,b.*
from a inner join b on (a.id=b.id)我不知为何不加top就报错,是我的问题,还是规定就是这样吗?
不明白为什么有这个规定?2.更新视图时,如果视图是由多个基表组成的,当删除视图中的记录时,是删除哪个基表中的呢?
是不是删除所以基表中的记录呢?
我的测试结果是,全删除了,我不解,总该有个规则吧,可是规则是什么呢?

解决方案 »

  1.   

    第一个,没这个规定应该是你语句的问题,有可能是因为你在子查询里排序了,你检查一下第二个,等T-MAC贴他的文章地址
      

  2.   

    我没说明白,我是指加上
    order by 
    语句时,必须要 select top n 才行呀,不行您可以试试。
      

  3.   

    说先第2个吧,要想更新视图必须满足一下条件。
         SELECT子句中的目标列不能包含聚集函数。     SELECT子句中不能使用DISTINCT关键字。     不能包括GROUP BY子句。     不能包括经算术表达式计算出来的列。     视图必须是基于单表的,即由单个基本表使用选择、投影操作导出,并且要包含了基本表的主
      

  4.   

    请教关于视图的两个初级问题
    1.如果连接两个基表,比如:
    select a.*,b.*
    from a inner join b on (a.id=b.id)
    不行, 必须要加上 top n 呢?比如:
    select top 100 a.*,b.*
    from a inner join b on (a.id=b.id)我不知为何不加top就报错,是我的问题,还是规定就是这样吗?
    不明白为什么有这个规定?---------
    不用,直接这样即可.除非是你自己语句有问题.
    select a.*,b.* from a inner join b on a.id=b.id
    2.更新视图时,如果视图是由多个基表组成的,当删除视图中的记录时,是删除哪个基表中的呢?
    是不是删除所以基表中的记录呢?
    我的测试结果是,全删除了,我不解,总该有个规则吧,可是规则是什么呢?
    ---------
    你不需要更新视图,只需要更新你所说的基表的数据.
    因为视图是建立在表的基础上的.表的数据变化则影响视图的变化.
      

  5.   

    比如这样的语句
    SELECT * FROM (
    SELECT * FROM TB ORDER BY ID
    ) T
    你在括号里加的ORDER BY是没有任何意义的,所以SQL会报错,但如果你在前边加上了TOP XXX,ORDER BY就变成了筛选的依据,就不会报错。明白了没?
      

  6.   

    视图里面用order by排序的话,
    必须使用Top
    -----------------
    TOP PERCENT 100 表示抽出全部数据
      

  7.   


    我是说,视图中如果有
    order by 的话,就必须加上
    select top n
    我不知这是为什么?
      

  8.   

    http://msdn.microsoft.com/zh-cn/library/ms188385%28SQL.90%29.aspx看这个msdn上说的很清楚。
      

  9.   

    对视图更新的限制⑴  若视图是由两个以上基本表导出的,则此视图
          不允许更新⑵  若视图的字段来自字段表达式或常数,不允许
          对此视图执行INSERT和UPDATE操作, 但是
          允许执行DELETE操作
    ⑶  若视图的字段来自集函数,则此视图不允许更新⑷  若视图定义中含有GROUP BY子句,则此视图不
          允许更新⑸  若视图定义中含有DISTINCT短语, 则此视图不
          允许更新
    ⑹  若视图定义中含有嵌套查询,并且内层查询的
          FROM子句涉及的表也是导出该视图的基本表,
          则此视图不允许更新⑺  一个不允许更新的视图上定义的视图也不允许
         更新
      

  10.   

    --关于视图的ORDER BY 
    请看http://blog.csdn.net/feixianxxx/archive/2009/11/11/4798287.aspx
      

  11.   

    --关于视图中涉及到多表连接更新的问题 
    还是看http://blog.csdn.net/feixianxxx/archive/2009/11/11/4798287.aspx