分区视图

 
分区视图是提高查询性能的一个很好的办法


--看下面的示例

--示例表
create table tempdb.dbo.t_10(
id
int primary key check(id between 1 and 10),name varchar(10))

create table pubs.dbo.t_20(
id
int primary key check(id between 11 and 20),name varchar(10))

create table northwind.dbo.t_30(
id
int primary key check(id between 21 and 30),name varchar(10))
go

--分区视图
create view v_t
as
select * from tempdb.dbo.t_10
union all
select * from pubs.dbo.t_20
union all
select * from northwind.dbo.t_30
go

--插入数据
insert v_t select 1 ,'aa'
union  all select 2 ,'bb'
union  all select 11,'cc'
union  all select 12,'dd'
union  all select 21,'ee'
union  all select 22,'ff'

--更新数据
update v_t set name=name+'_更新' where right(id,1)=1

--删除测试
delete from v_t where right(id,1)=2

--显示结果
select * from v_t
go

--删除测试
drop table northwind.dbo.t_30,pubs.dbo.t_20,tempdb.dbo.t_10
drop view v_t

/**//*--测试结果

id          name     
----------- ----------
1          aa_更新
11          cc_更新
21          ee_更新

(所影响的行数为 3 行)
==
*/


八、 树型的实现


--参考

--树形数据查询示例
--
作者: 邹建

--示例数据
create table [tb]([id] int identity(1,1),[pid] int,name varchar(20))
insert [tb] select 0,'中国'
union  all  select 0,'美国'
union  all  select 0,'加拿大'
union  all  select 1,'北京'
union  all  select 1,'上海'
union  all  select 1,'江苏'
union  all  select 6,'苏州'
union  all  select 7,'常熟'
union  all  select 6,'南京'
union  all  select 6,'无锡'
union  all  select 2,'纽约'
union  all  select 2,'旧金山'
go

--查询指定id的所有子
create function f_cid(
@id int
)
returns @re table([id] int,[level] int)
as
begin
declare @l int
set @l=0
insert @re select @id,@l
while @@rowcount>0
begin
 
set @l=@l+1
 
insert @re select a.[id],@l
 
from [tb] a,@re b
 
where a.[pid]=b.[id] and b.[level]=@l-1
end
/**//**//**//*--如果只显示最明细的子(下面没有子),则加上这个删除
delete a from @re a
where exists(
  select 1 from [tb] where [pid]=a.[id])
--
*/
return
end
go

--调用(查询所有的子)
select a.*,层次=b.[level] from [tb] a,f_cid(2)b where a.[id]=b.[id]
go

--删除测试
drop table [tb]
drop function f_cid
go

你可能感兴趣的:(视图)