创建视图

create table abc(S01 int,S02 int,S03 int,S04 int,S05 int)
insert into abc select '1','2','4','2004','23'
insert into abc select '1','2','3','2004','24'
insert into abc select '1','2','3','2004','25'
insert into abc select '1','2','5','2005','0'
insert into abc select '1','2','9','2005','0'
create table bbb(S01 int,S02 int,S03 int,S04 int,S05 int)
insert into bbb select '2','2','4','2004','23'
insert into bbb select '2','2','3','2004','24'
insert into bbb select '2','2','3','2004','25'
insert into bbb select '2','2','5','2005','0'
insert into bbb select '2','2','9','2005','0'

CREATE VIEW Customers    --分区视图
AS
SELECT abc.S01, abc.S02, abc.S03, abc.S04, abc.S05
FROM abc
UNION ALL
SELECT bbb.S01, bbb.S02, bbb.S03, bbb.S04, bbb.S05
FROM bbb      
或者
CREATE VIEW AAA
AS
SELECT abc.*
FROM abc
UNION ALL
SELECT bbb.*
FROM bbb
 
 

分区视图
分区视图是通过对成员表使用 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 选项设置)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值