SQL SERVER视图
2011-09-29 13:56:14     我来说两句 0
我要投稿    [字体:小 大]

创建视图
创建一个虚拟表,该表以另一种方式表示一个或多个表中的数据。CREATE VIEW 必须是查询批处理中的第一条语句。
语法
CREATE VIEW [ < database_name > .] [ < owner > .] view_name [ ( column [ ,...n ] ) ]
[ WITH < view_attribute > [ ,...n ] ]
AS
select_statement
[ WITH CHECK OPTION ]

< view_attribute > ::=
    { ENCRYPTION | SCHEMABINDING | VIEW_METADATA }
参数
view_name
是视图的名称。视图名称必须符合标识符规则。可以选择是否指定视图所有者名称。
column
是视图中的列名。只有在下列情况下,才必须命名 CREATE VIEW 中的列:当列是从算术表达式、函数或常量派生的,两个或更多的列可能会具有相同的名称(通常是因为联接),视图中的某列被赋予了不同于派生来源列的名称。还可以在 SELECT 语句中指派列名。
如果未指定 column,则视图列将获得与 SELECT 语句中的列相同的名称。
 
WITH CHECK OPTION
强制视图上执行的所有数据修改语句都必须符合由 select_statement 设置的准则。通过视图修改行时,WITH CHECK OPTION 可确保提交修改后,仍可通过视图看到修改的数据。
WITH ENCRYPTION
表示 SQL Server 加密包含 CREATE VIEW 语句文本的系统表列。使用 WITH ENCRYPTION 可防止将视图作为 SQL Server 复制的一部分发布。
 
示例. 使用 WITH CHECK OPTION
下例显示名为 CAonly 的视图,该视图使得只对加利福尼亚州的作者应用数据修改。
USE pubs
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
      WHERE TABLE_NAME = 'CAonly')
   DROP VIEW CAonly
GO
CREATE VIEW CAonly
AS
SELECT au_lname, au_fname, city, state
FROM authors
WHERE state = 'CA'
WITH CHECK OPTION
GO
 
 
通过视图向表中插入数据需要满足的要求,视图必须来源于一个表,一般行子集视图都没有问题(但是必须保护关键字段,如primary key ,not null的字段必须有,才可以进行更新)
如果是多表视图,或者是列子集视图(不满足上面的要求),则可以使用instead of insert触发器来实现
单个表通过视图插入数据
1、首先创建表
CREATE TABLE [dbo].[TTotal](
 [年份] [nvarchar](50) NULL,
 [地区] [nvarchar](50) NULL,
 [数值类别] [nvarchar](50) NULL,
 [数值] [int] NULL
) ON [PRIMARY]
2、其次,创建视图
create view VTotal
as
select * from TTotal
3、执行insert 语句
insert into VTotal values('2006','测试','1',1)
 
对于多个表的视图,使用instead of insert 可以执行插入操作
instead of 触发器的用法
INSTEAD OF 触发器的主要优点是可以使不能更新的视图支持更新。基于多个基表的视图必须使用   
       INSTEAD OF 触发器来支持引用多个表中数据的插入、更新和删除操作。INSTEAD OF 触发器的另一个优点是使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。

Transact-SQL 语句创建两个基表、一个视图和视图上的 INSTEAD OF 触发器。以下表将个人数据和业务数据分开并且是视图的基表。

/*在视图上定义 instead of insert 触发器以在一个或多个基表中插入数据。*/
--部门表
create table dept
(
    d_id int primary key,
    d_name varchar(20)
)
--员工表
create table emp
(
   e_id int primary key,
   e_name varchar(20),
   d_id int references dept(d_id)
)
 
select * from emp
 
drop view v
create view v
as
select e_id,e_name,d.d_id,d_name from emp e,dept d where e.d_id=d.d_id
 
select * from v
 
 
insert into v values(1001,'张珊',101,'销售部')
 
/*******************使用instead of 触发器******************/
drop trigger de_em_insert
go
create trigger de_em_insert
on v
instead of insert
as
begin
    if (not exists (select d.d_id from dept d, inserted i where d.d_id = i.d_id))
     insert into dept select d_id,d_name from inserted
 
   if (not exists (select e.d_id from emp e, inserted i where e.d_id = i.d_id))
   insert into emp select e_id,e_name,d_id from inserted
else
   update emp set e_id = i.e_id,e_name = i.e_name from emp e, inserted i where e.d_id = i.d_id
end
可以在视图或表中定义 INSTEAD OF DELETE 触发器,以代替 DELETE 语句的标准操作。通常,在视图上定义 INSTEAD OF DELETE 触发器以便在一个或多个基表中修改数据。  
       可在视图上定义 INSTEAD OF UPDATE 触发器以代替 UPDATE 语句的标准操作。通常,在视图上定义 INSTEAD OF UPDATE 触发器以便修改一个或多个基表中的数据。

SQL SERVER视图相关推荐

  1. CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板

    C#生成sql视图的实体类 using System; using System.Text; using CodeSmith.Engine; using SchemaExplorer; using S ...

  2. sql server 视图_轻松搜索SQL Server –搜索目录视图

    sql server 视图 The need to search through database schema for specific words or phrases is commonplac ...

  3. sql server 视图_SQL Server –具有引用视图的开发实践

    sql server 视图 We've recently had production failures because our developers changed an important ref ...

  4. 【SQL Server学习笔记】SQL SERVER 视图

    视图包括:普通视图,索引视图,分布式分区视图. 关于视图的最佳实践: A.对视图进行性能优化的过程和普通的select查询语句的优化过程是一样的. B.不要在一个视图的定义中调用另一个视图. C.如果 ...

  5. SQL Server 视图设计器

    SQL Server 中经常需要写一些查询,关联好多张表,显示无数个列.如果使用视图设计器,可以大大提高效率,同是减少差错. 1. 启动视图设计器 为数据库"新建视图",将启用视图 ...

  6. SQL Server 视图创建点滴 (转http://www.cnblogs.com/fineboy/archive/2008/05/10/236731.html#1191527)...

    2008年6月22日      视图在数据库开发过程中是非常重要的,对提高查询速度有很大的提高.因此我们的学会创建视图,并且有效的使用视图. (1)表准的SQL视图         标准视图比较简单, ...

  7. SQL Server 视图创建点滴

    视图在数据库开发过程中是非常重要的,对提高查询速度有很大的提高.因此我们的学会创建视图,并且有效的使用视图. (1)表准的SQL视图         标准视图比较简单,大家也都在使用,在此就不垒述了. ...

  8. 数据库 SQL Server 视图 创建视图 查询视图 修改视图 删除视图

    文章目录 1 视图概述 2 创建视图 3 查询视图 4 修改视图 5 删除视图 总结 1 视图概述 视图就是将一个或多个表中的目标字段抽取出来形成的一个虚拟表.这个虚拟表和真实的表具有相同的功能. 视 ...

  9. sql server视图排序

    视图可以理解为一个临时表,是一个结果集合,大部分对表的操作语句都可以用,但是对于升序降序的语句略有不同 在这里我们选择在设计界面中直接操作 第一步:在列条件区域进行设置,类似于excel的傻瓜式操作 ...

最新文章

  1. shell 字符串截取
  2. Python Django 一对多之插入多条数据示例
  3. 绘画 某种字体 以某种折行规则 最后画出的text有多大
  4. Shell编程中Shift的用法(转)
  5. 在树莓派是安装并配置NTP服务
  6. mysql grant usage on_grant 权限 on 数据库对象 to 用户
  7. 检查电脑是否被安装***三个小命令
  8. 黑龙江省计算机应用能力考试,2020黑龙江省一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
  9. Android4.1MediaPlayer无缝播放
  10. django管理界面使用与bootstrap模板使用
  11. 桃养人,杏害人,樱桃树下埋死人
  12. [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
  13. Dev C++使用简明教程
  14. 视频教程-嵌入式Linux驱动开发-嵌入式
  15. selenium滑块操作(基础)
  16. 异步方法中取消异步操作
  17. 【Android】模拟Android微信APK底部的TabHost选项卡
  18. 软件工程——软件的系统设计
  19. 支付宝sdk集成,报系统繁忙 请稍后再试(ALI64)
  20. 京东全民营业拿金币之辅助脚本网页版

热门文章

  1. HDOJ 2049 不容易系列之(4)——考新郎
  2. java多线程------实现多线程两种方式
  3. SQLServer2008 视图创建实例
  4. POJ3278Catch That Cow(BFS)
  5. 关于lombok插件的使用,强大的简化代码工具
  6. Codeforces 1093C (思维+贪心)
  7. visual studio code配置项
  8. Unity3d疑难问题解决
  9. 剖析 .NET 托管提供程序
  10. Pytorch实践中文教程(1)