需求说明
本篇文章的视图需求也是建立在 游标的使用和示例 那篇文章内提到的两张基础表之上的。
目标是得到如下图的结果集,这张图是结果集的右半部分,左半部分就是对应的主表数据。
视图的使用
1、视图的理解
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据 。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表 。从数据库系统内部来看,视图是由一张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表 一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。
2、视图的用途
– 筛选表中的行
– 防止未经许可的用户访问敏感数据
– 降低数据库的复杂程度
– 将多个物理数据库抽象为一个逻辑数据库
3、视图的优点
使用视图可以给用户和开发人员带来很多好处。具体为:
A. 对最终用户的好处
( 1 )结果更容易理解
创建视图时,可以将列名改为有意义的名称,使用户更容易理解列所代表的内容。在视图中修改列名不会影响基表的列名。
( 2 )获得数据更容易
很多人对 SQL 不太了解,因此对他们来说创建对多个表的复杂查询很困难。可以通过创建视图来方便用户访问多个表中的数据。
B. 对开发人员的好处
( 1 )限制数据检索更容易
开发人员有时需要隐藏某些行或列中的信息。通过使用视图,用户可以灵活地访问他们需要的数据,同时保证同一个表或其他表中的其他数据的安全性。要实现这一目标,可以在创建视图时将要对用户保密的列排除在外。
( 2 )维护应用程序更方便
调试视图比调试查询更容易。跟踪视图中过程的各个步骤中的错误更为容易,这是因为所有的步骤都是视图的组成部分
本例代码
CREATE VIEW view_name AS SELECT dbo.DayPlan_Fee.ID, dbo.DayPlan_Fee.PlanDate AS 日期, dbo.DayPlan_Fee.BelongType AS 归集对象, dbo.DayPlan_Fee.BelongNumber AS 对应编号, dbo.DayPlan_Fee.CusName AS 客户名称, dbo.DayPlan_Fee.ContentType AS 内容类别, dbo.DayPlan_Fee.Effect AS 工作效果, dbo.DayPlan_Fee.ContentDes AS 工作说明, dbo.DayPlan_Fee.Dept AS 部门, dbo.DayPlan_Fee.FeeAfford AS 费用承担人, dbo.DayPlan_Fee.NextUserID AS 领导ID, dbo.DayPlan_Fee.WFState AS 审核状态, dbo.DayPlan_Fee.BackReason AS 退回原因, dbo.DayPlan_Fee.UserID AS 填单人ID, dbo.DayPlan_Fee.InsertTime AS 填单时间, dbo.DayPlan_Fee.LastUpdateTime AS 最后更新时间, dbo.Users.UserName AS 填单人姓名, dbo.Fun_GetJiaoTongFeeByFeeID(dbo.DayPlan_Fee.ID) AS 交通, dbo.Fun_GetFeeCountByFeeID(dbo.DayPlan_Fee.ID, N'交通费') AS 交通费总和, dbo.Fun_GetFeeNumCountByFeeID(dbo.DayPlan_Fee.ID, N'交通费') AS 交通费发票张数总和, dbo.Fun_GetZhuZhaoFeeByFeeID(dbo.DayPlan_Fee.ID, N'住宿费') AS 住宿, dbo.Fun_GetFeeCountByFeeID(dbo.DayPlan_Fee.ID, N'住宿费') AS 住宿费总和, dbo.Fun_GetFeeNumCountByFeeID(dbo.DayPlan_Fee.ID, N'住宿费') AS 住宿费发票张数总和, dbo.Fun_GetZhuZhaoFeeByFeeID(dbo.DayPlan_Fee.ID, N'招待费') AS 招待, dbo.Fun_GetFeeCountByFeeID(dbo.DayPlan_Fee.ID, N'招待费') AS 招待费总和, dbo.Fun_GetFeeNumCountByFeeID(dbo.DayPlan_Fee.ID, N'招待费') AS 招待费发票张数总和, dbo.Fun_GetQiTaFeeByFeeID(dbo.DayPlan_Fee.ID, N'邮寄费') AS 邮寄, dbo.Fun_GetFeeCountByFeeID(dbo.DayPlan_Fee.ID, N'邮寄费') AS 邮寄费总和, dbo.Fun_GetFeeNumCountByFeeID(dbo.DayPlan_Fee.ID, N'邮寄费') AS 邮寄费发票张数, dbo.Fun_GetQiTaFeeByFeeID(dbo.DayPlan_Fee.ID, N'标书费') AS 标书, dbo.Fun_GetFeeCountByFeeID(dbo.DayPlan_Fee.ID, N'标书费') AS 标书费总和, dbo.Fun_GetFeeNumCountByFeeID(dbo.DayPlan_Fee.ID, N'标书费') AS 标书费发票张数总和, dbo.Fun_GetQiTaFeeByFeeID(dbo.DayPlan_Fee.ID, N'其他') AS 其他, dbo.Fun_GetFeeCountByFeeID(dbo.DayPlan_Fee.ID, N'其他') AS 其他费用总和, dbo.Fun_GetFeeNumCountByFeeID(dbo.DayPlan_Fee.ID, N'其他') AS 其他发票张数总和 FROM dbo.DayPlan_Fee INNER JOIN dbo.Users ON dbo.DayPlan_Fee.UserID = dbo.Users.UserID
总结
可以看到,视图中也穿插了很多标量值函数的调用,这样也有个好处,可以让功能相对分立,修改维护也比较方便。大家有什么问题可以联系我哦,在文章标题下方有我们的qq群哦,欢迎加入。
评论前必须登录!
注册