都不知道你两个表里面的数据查询当然两个表都要查了,你的主键是apid,logid,当你同时指定了 apid,logid 以后结果自然是唯一的,查到第一个结果自然就停下来了,没有继续下一个表另外不知道你指的分区视图是什么,你那个就只是一个最基本的视图而已,为什么说是分区视图?

解决方案 »

  1.   

    楼上的兄弟,我建了check约束和主键,sql server应该根据我的分区键自动定位所需要查的表才对啊。这就是分区视图的意义嘛。要不然干嘛把结构相同的表分解成几个啊。
      

  2.   

    我又试了一下,如果只把apid作为主键的话,分区视图是成功的。但作为主键的部分就不行。可是书上明明说只要分区键是主键的部分就可以了啊急死我了
      

  3.   

    其实你建的分区视图没有错,联合主键也没有错,错在查询了.
    分区视图在查询的时候要求查询的值与分区列的类型相同,而你在查询where apid=1时,SQLSERVER会将1视为tinyint,但apid的类型却为int,因此数据类型不对,导致分区失效,进行全区扫描.
    这样处理一下,把分区列的查询值显示转换为分区列的数据类型,例如:
    select * from userlog where apid = CAST(1 as int)    /*将1强制转换为分区列的数据类型*/