tyy建一个存储过程create     procedure   activity
as
select * from activity2000 union
select * from activity2001 union
……
select * from activity2005

解决方案 »

  1.   

    最好不要用*,而用具体的字段,假如说你的activity表有a,b,c,d,e这几个字段,而只需要a,b,c三个字段,那么这时简化为如下create view dbo.activity as 
    select a,b,c from activity2000 union
    select a,b,c from activity2001 union
    ……
    select a,b,c from activity2005这样也是提高效率的一个途径
      

  2.   

    to singlepine(小山):
    实际上我的就是这样的。:)
      

  3.   

    分区视图
    分区视图是通过对成员表使用 UNION ALL 所定义的视图,这些成员表的结构相同,但作为多个表分别存储在同一个 SQL Server 中,或存储在称为联合 SQL Server 2000 服务器的自主 SQL Server 2000 服务器组中。在设计分区方案时,必须明确每个分区上包含的数据。例如,如果使 Customers 表数据分布在分别位于三个服务器上的三个成员表中(Customers_33 在 Server1 上,Customers_66 在 Server2 上,Customers_99 在 Server3 上),则要以下面的方式在 Server1 上定义分区视图:--Partitioned view as defined on Server1
    CREATE VIEW Customers
    AS
    --Select from local member table
    SELECT *
    FROM CompanyData.dbo.Customers_33
    UNION ALL
    --Select from member table on Server2
    SELECT *
    FROM Server2.CompanyData.dbo.Customers_66
    UNION ALL
    --Select from mmeber table on Server3
    SELECT *
    FROM Server3.CompanyData.dbo.Customers_99一般情况下,如果视图为下列格式,则称其为分区视图:SELECT <select_list1>
    FROM T1
    UNION ALL
    SELECT <select_list2>
    FROM T2
    UNION ALL
    ...
    SELECT <select_listn>
    FROM Tn分区视图的创建条件 SELECT 列表 
    成员表中的所有列应在视图定义的列列表中被选定。
    每个 select_list 中的同一序号位置上的列应属于同一类型,包括排序规则。列仅仅属于隐性可转换类型(如 UNION 的通常情况下)是不够的。 
    另外,at least one 列(例如 <col>)必须以相同的序号位置出现在所有 SELECT 列表中。应这样定义 <col>:使成员表 T1,...,Tn 在 <col> 上分别定义 CHECK 约束 C1,...,Cn。必须以下面的格式在表 T1 上定义约束 C1:C1 ::= < simple_interval > [ OR < simple_interval > OR ...]
    < simple_interval > :: = 
        < col > { < | > | <= | >= | = } 
        | < col > BETWEEN < value1 > AND < value2 >
        | < col > IN ( value_list )
        | < col > { > | >= } < value1 > AND
            < col > { < | <= } < value2 >约束应使 <col> 的任何给定值都能满足约束 C1,...,Cn 的 at most one,这样,约束应形成一套不连接的或非重叠的间隔。定义不连接的约束的列 <col> 称为"分区列"。请注意分区列在基础表中可能有不同的名称。约束应处于"已启用"状态,以使它们满足分区列的上述条件。如果禁用了约束,则请使用 ALTER TABLE 的 WITH CHECK 选项或 CHECK constraint_name 选项重新启用约束检查。 
    下面是有效约束集的示例:{ [col < 10], [col between 11 and 20] , [col > 20] }
    { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }在 SELECT 列表中不能多次使用同一列。 
    分区列 
    分区列是表的 PRIMARY KEY 的一部分。
    不能是计算、标识、默认或 timestamp 列。
    如果成员表中的同一列上存在多个约束,则 SQL Server 忽略所有约束且在确定视图是否为分区视图时不考虑这些约束。为满足分区视图的条件,在分区列上应只有一个分区约束。
    对分区列的可更新性没有约束。 
    成员表(或基础表 T1,...,Tn) 
    表可以是本地表,也可以是通过由四部分构成的名称或基于 OPENDATASOURCE 或 OPENROWSET 的名称引用的其它 SQL Server 中的表。(OPENDATASOURCE 和 OPENROWSET 语法可以指定表名,但不能指定直接传递查询。)有关更多信息,请参见 OPENDATASOURCE 和 OPENROWSET。 
    如果一个或多个成员表是远程表,则视图称为 distributed partitioned view,并且适用附加条件。本节稍后将对其进行讨论。在用 UNION ALL 语句组合的表集中,同一个表不能出现两次。
    成员表不能在表中的计算列上创建索引。
    成员表在数目相同的列上应具有所有 PRIMARY KEY 约束。
    视图中的所有成员表应有相同的 ANSI 填充设置(使用 sp_configure 中 user options 选项或 SET 选项设置)。
      

  4.   

    楼主的需求可以由分区视图来实现(在联机帮助中是如上说明的),简单点说:
    1.所有Table的Schema完全相同;
    2.所有Table都必须有一个约束(SQLServer将根据查询条件和各个table的约束来决定应该真正扫描哪些table);
    3.在创建视图的语句中使用UNION ALL而不要使用UNION;另外可以在每个Table上创建索引.