SQL server学习_视图

1.视图
视图其实是一张虚拟表,他是一张表的部分数据或多张表的综合数据(视图就是把SQL语句封装起来)
可以看做是一个结果集,但是不是一个结果集
视图不具备存储数据的能力 (一旦源数据被修改删除,视图的结果集就会被修改删除,如果是一个结果集那么他封装起来里面的源数据被修改他就不会改变,所以说视图可以看做是一个结果集但是他又不是结果集)
视图在操作上和数据表没有区别,但两者的差异是其本质是不同的,数据表示实际存储记录的地方,然而视图并不保存任何记录,它存储的实际上是查询语句
我们可以将视图看做一个SQL语句的集合
使用的时候,会执行其中的SQL语句,得到一个结果集

-->视图的三大优点
   1、筛选表中的行 (可以把多张表连接成一张表,然后再在这个视图结果集里对这些行筛选)
   2、防止未经许可的用户访问敏感数据 (做成视图以后这个视图结果集里的数据可能来自多张表,那么给你一个视图表名你不可能访问到我的源数据)
   3、降低数据库的复杂程度 (视图里存储的实际上是查询语句,那么把这些查询语句都放在视图里,使用的时候直接使用视图名,就简单很多了)
  --》 视图的定义
  create view vw_名字
    as
一个结果集
-------------------------

alter view vw_join
as
  select t1.sname,t1.sage,t1.sgender,t2.cname,t2.cDescription,t3.chinese,t3.english,t3.math from
  TStudent as t1
  inner join
  TClass as t2
  on t1.classId =t2.classId
  inner join
  TScore as t3
  on t1.scoreId =t3.scoreId

select * from vw_join

章夏槐 9 0 Java学院 黑马班 69 132 99
符梦琪 50 0 .Net学院 基础班 148 85 50
韦天磊 74 1 .Net学院 就业班 14 33 134
璩伟祺 32 1 Java学院 就业班 144 43 121
滑烨磊 1 1 Java学院 就业班 73 130 103
柴傲柏 36 0 C++学院 就业班 98 8 57
梅天荷 14 0 Web学院 就业班 96 43 99
左雅彤 91 0 C++学院 就业班 88 80 44

SQL server_if-else、while、变量、try-catch

四、变量
1)变量的声明 关键字 declare @变量名 类型
declare @name nvarchar(10)
declare @age int
declare @gender nvarchar(1)

2)变量的赋值有两种方法
set @age=40
set @gender=0
select @name=sname,@age=sage, @gender=sgender from TStudent where studentid=10
select  @name,@age,@gender    --可以从表中查询数据并赋值,可以一次性给多个变量赋值

--》显示
select  @name,@age,@gender   --select可以以表的形式显示多个变量的值

print @name    --print只可以显示一个变量的值,以文本消息的形式

局部变量:
局部变量必须以标记@作为前缀 ,如@Age int
局部变量:先声明,再赋值
全局变量(系统变量):
全局变量必须以标记@@作为前缀,如@@version
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值

五、if-else
语法:
  if
   begin
   end
  else
   begin
   end
这里的begin和end就相当于C#里的两个大括号({})

六、while循环 跟C#里一样
大括号用begin和end替换

-->try -catch

语法:

begin try

        SQL语句   ---这里和C#里一样,一旦遇到异常下面的语句将不再执行,直接跳到catch里面,执行catch力的语句

end try

begin catch

        SQL语句

end catch

SQL server_触发器

八、常见的触发器

触发器的作用:自动化操作,减少了手动操作以及出错的几率(现实工作中用的比较少,因为想让他执行起来效率高很难)

一、DML触发器

Insert、delete、update(不支持select)

after触发器(for)、instead of触发器(不支持before触发器)

二、(*)DDL触发器

Create table、create database、alter、drop….

语法:

   create trigger trig_触发器名 on 针对哪个表触发(表名)

    after (这里用for也一样,两者都表示after触发器) | intead of   delete、update、insert

as

begin

   T-SQL语句

end

1、首先了解两张表   inserted,deletede

这两张表示当执行、插入、修改更新等操作时系统给创建的表,当操作结束之后会自动销毁,每执行依据t-sql语句就会触发一次触发器,不管你执行的语句删除、修改、插入的是多少条记录,

所以,要注意:这两张表里存的是你上一次最后执行的记录

   -->inserted

当执行 insert 语句的时候会生成两条记录,一条会插入到你指定的表里,一条会放到系统创建的 inserted 表中

当执行update  语句的时候会先把原来的记录删除放到系统创建的deleted表中,然后生成两条记录,一条放到你指定的表里,一条放到insert表里

   --》deleteed

当执行delete语句时,会把这条记录放到deleted表里

2、after 触发器

在语句执行操作之后触发

在语句执行完毕之后触发

按语句触发,而不是所影响的行数,无论所影响为多少行,只触发一次。

只能建立在常规表上,不能建立在视图和临时表上。(*)

可以递归触发,最高可达32级。

update(列),在update语句触发时,判断某列是否被更新,返回布尔值。

3、intead of触发器

用来替换原来的操作

用来替换原本的操作

不会递归触发

可以在约束被检查之前触发

可以建在表和视图上(*)

select * from TClass 

--复制一张新表,用来备份

 * into NewTClass from TClass 

select * from NewTClass 

--创建一个触发器,当删除TClass表中的数据时自动触发,把删除的数据备份到一张新标中

create trigger trig_NewTClass_delete on TClass

after delete  --执行删除语句之后触发

as

begin

    --一次插入多条记录,如果用values只可以查入一条,要是用户一次删除多条,那么values就不能把多条记录插入了

   insert into NewTClass select cName,cDescription from deleted

end

delete 

--删除触发器

drop trigger trig_NewTClass_delete

--instead触发器,当执行删除操作时,把删除操作替换成 打印   print '执行删除操作了'

create trigger trig_NewTClass_delete on TClass

instead of delete

as

begin

    print '执行删除操作了'

end

数往知来SQL SERVER 视图 触发器 <九>的更多相关文章

  1. 11、SQL Server 视图、数据库快照

    SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集.只有当视图上建立了索引后,才会具体化. 视图可以筛选和处理数据,而不是直接访问基础表.如:创建一个视图,只展示源表中 ...

  2. 使用SQL Server视图的优缺点

    SQL Server视图我们经常会用的到,下面就为您介绍使用SQL Server视图的优缺点,希望可以对您SQL Server视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...

  3. (4.22)sql server视图/索引视图概念

    (4.22)sql server视图 关键词:sql server视图.索引视图 SQL Server视图是由SQL语句组成的逻辑数据库对象.它也可以称为由SQL语句组成的虚拟表,该SQL语句可能包含 ...

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

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

  5. SQL SERVER视图对查询效率的提高

    SQL SERVER视图不仅可以实现许多我们需要的功能,而且对于SQL SERVER查询效率的提高也有帮助,下面一起来了解一下. 有两张数据表:A和B,其中A的记录为2万条左右,而B中的数据为200万 ...

  6. SQL Server:触发器详解

    1. 概述 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活. 所以触发器可以用来实现对表实施复杂的完整性约束. 2. 触发器的分类 SQL S ...

  7. SQL Server 视图

    视图实际上就是一个存储查询,重点是是可以混合和匹配来自基本表(或者其他视图)的数据,从而创建在很多方面像另一个基表那样起作用的对象.可以创建一个简单的查询,仅仅从一个表中选择几列,而忽略其他列:或者也 ...

  8. SQL SERVER TRIGGER 触发器

    1.触发器简介 触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手动执行,而是由事件来触发.触发器是当对某一个表进行操作.例如:update.insert.delete这些操作的时候,系统会 ...

  9. sql server中触发器

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...

随机推荐

  1. uploadify+批量上传文件+java

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. .NET + OpenCV & Python + OpenCV 配置

    最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省 ...

  3. ExtJS4之Ext.MessageBox的各种用法

    1. Ext.Msg.alert(String title,String msg)[Ext.MsssageBox.alert(Sting title,Sting msg,fn)]与javascript ...

  4. Google 网络库Volley简介

    Volley是什么? 2013 Google I/O 大会发布的Android平台网络通讯库,旨在帮助开发者实现更快速,简单,健壮的网络通讯.支持网络图片的缓存加载功能. 适用场景:数据量不大,但是通 ...

  5. php关于static关键字

    静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用.静态方法中,$this伪变量不允许使用.可以使用self,parent,s ...

  6. Java 数据类型转换

    int iValue = new Integer(strValue).intValue();String str = intObj.toString();int number = Integer.pa ...

  7. android--多View切换viewpager

    网上看到viewpager的多view动画切换,模仿制作了一个  学习到了. 先看效果图:      先看主类的layout <LinearLayout xmlns:android=" ...

  8. github概念和实战

    fork: 通过fork操作,你将拥有了别人创建的repo的ownership,但是url却变成了/youraccount/repo,这时你将可以做git push操作 clone: 该命令是直接将r ...

  9. Android WebView保存Cookie登录

    因项目需要,需要在App中嵌入网页,使用Nativie方式登录,然后将cookie保存到WebView中,实现免登录功能.同步Cookie到WebView的方法网上有大量的参考资料,也可以参考下面的代 ...

  10. Uploadify上传Excel到数据库

    前两章简单的介绍了Uploadify上传插件的基本使用和相关的属性说明.这一章结合Uploadify+ssh框架+jquery实现Excel上传并保存到数据库.         以前写的这篇文章 Jq ...