视图:一种多表查询的虚拟表,隐藏了实际表的表结构,简化了数据访问的操作

IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE='V' AND NAME='V_TONY')
DROP VIEW V_TONY
GO
CREATE VIEW V_TONY
AS
SELECT A.str1 AS A_STR1,A.str1 AS A_STR2,B.str1 AS B_STR FROM A,B
GO

函数:功能单一

标量值函数:通过生日计算年龄
IF OBJECT_ID('F_GetAge') IS NOT NULL
DROP FUNCTION F_GetAge
GO
CREATE FUNCTION F_GetAge(@birthday datetime)
RETURNS INT
AS
BEGIN
DECLARE @AGE INT
SET @AGE=YEAR(GETDATE())-YEAR(@birthday)
RETURN @AGE
END
GOSELECT DBO.F_GetAge('1991-02-05')表值函数:通过姓名返回一些信息
IF OBJECT_ID('F_GetInfoByName') IS NOT NULL
DROP FUNCTION F_GetInfoByName
GO
CREATE FUNCTION F_GetInfoByName(@name char(10))
RETURNS TABLE
AS
RETURN (SELECT * FROM Customers WHERE CNAME=@name)
GO

存储过程:执行一系列复杂操作,类似批处理文件。因为只在创建时进行编译,所以每次执行存储过程时不会再次编译,提高效率

无参数存储过程
IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE='P' AND NAME='P_TONY')
DROP PROCEDURE P_TONY
GO
CREATE PROCEDURE P_TONY
--WITH ENCRYPTION --加密
AS
BEGIN
DECLARE @DT  DATETIME
SELECT @DT=ADDDATE FROM A;--IF(DATEDIFF(DAY,@DT,GETDATE())>0)BEGINUPDATE A SET ADDDATE = GETDATE() WHERE DATEDIFF(DAY,ADDDATE,GETDATE())>0;END
ENDEXEC P_TONY1、有参数存储过程:RETURN
IF OBJECT_ID('P_TONY3') IS NOT NULL
DROP PROCEDURE P_TONY3
GO
CREATE PROCEDURE P_TONY3(@USERNAME VARCHAR(20))
AS
DECLARE @MSG INT
BEGINSELECT @MSG=COUNT(1) FROM Custs WHERE NAME LIKE '%'+@USERNAME+'%'
RETURN @MSG
END
GO2、有参数存储过程:OUTPUT
IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE='P' AND NAME='P_TONY2')
DROP PROCEDURE P_TONY2
GO
CREATE PROCEDURE P_TONY2(@USERNAME VARCHAR(20),@MSG VARCHAR(20) OUTPUT)
AS
BEGINIF(SELECT COUNT(1) FROM Custs WHERE NAME=@USERNAME)>0SET @MSG='此用户名存在'ELSESET @MSG='此用户名不存在'
END
GODECLARE @RES VARCHAR(20)
EXEC P_TONY2 '李四',@RES OUTPUT
SELECT @RES3、上述都存在的参数存储过程:RETURN和OUTPUT
IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE='P' AND NAME='P_TONY4')
DROP PROCEDURE P_TONY4
GO
CREATE PROCEDURE P_TONY4(@USERNAME VARCHAR(20),@MSG VARCHAR(20) OUTPUT)
AS
DECLARE @NUM INT
BEGINIF(SELECT COUNT(1) FROM Custs WHERE NAME LIKE '%'+@USERNAME+'%')>0SET @MSG='姓氏存在'ELSESET @MSG='姓氏不存在'
SELECT @NUM=COUNT(1) FROM Custs WHERE NAME LIKE '%'+@USERNAME+'%'
RETURN @NUM
END
GODECLARE @NUM INT
DECLARE @RES VARCHAR(20)
EXEC @NUM=P_TONY4 '张',@RES OUTPUT
SELECT @NUM,@RES

触发器:特殊的存储过程,实现表与表之间的约束,数据完整性,也可以对一些删除做日志

增加一条记录,如果城市是北京就回滚,其他城市就插入到两张表(表Custs就是通过表Customers触发的)
IF OBJECT_ID('TR_TONY') IS NOT NULL
DROP TRIGGER TR_TONY
GO
CREATE TRIGGER TR_TONY ON Customers
FOR INSERT
AS
BEGINDECLARE @CNAME CHAR(10),@CITY CHAR(10)SELECT @CNAME=CNAME,@CITY=city FROM INSERTEDIF(SELECT CITY FROM Customers WHERE CNAME=@CNAME)='北京'BEGINSELECT '北京暂时不开通'ROLLBACK TRANSACTIONENDELSEINSERT INTO Custs VALUES(@CNAME,@CITY)SELECT 'OK'
END
GOINSERT INTO Customers VALUES('Tony','上海')--OK
INSERT INTO Customers VALUES('Tony1','北京')--事务在触发器中结束。批处理已中止。

SQLSERVER的视图、函数、存储过程、触发器相关推荐

  1. mysql 触发器定义变量_MySQL 函数存储过程触发器定义简单示例

    1.变量提示 NEW 是新值-- OLD 是旧值 INSERT 只有NEW ----UPDATE有NEW和OLD ---DELETE只有OLD 2.准备测试表(userinfo.userinfolog ...

  2. mysql 视图 事务 存储过程 触发器 __ 邓治安

    视图 View 逻辑上的虚拟表 #创建视图 CREATE VIEW s_t(编号,姓名,性别,出生日期) AS SELECT * FROM student WITH CHECK OPTION#查询视图 ...

  3. mysql 视图 事务 存储过程 触发器——龙腾

    视图 View 逻辑上的虚拟表 #创建视图 CREATE VIEW s_t(编号,姓名,性别,出生日期) AS SELECT * FROM student WITH CHECK OPTION#查询视图 ...

  4. sqlserver中自定义函数+存储过程实现批量删除

    由于项目的需要,很多模块都要实现批量删除的功能.为了方便模块的调用,把批量删除方法写成自定义函数.直接上代码. 自定义函数: ALTER FUNCTION [dbo].[func_SplitById] ...

  5. 刷新SqlServer所有视图【存储过程】

    摘自:http://www.cnblogs.com/yashen/archive/2004/12/23/81000.html CREATE PROCEDURE RefreshAllView AS DE ...

  6. 视图、存储过程、函数、游标、触发器使用

    说明及使用: 视图.存储过程.函数.游标与触发器介绍_百度文库 一.视图注意:1.不能够在创建视图的查询语句中,使用order by排序语句 2.不能带参数 二.存储过程与函数: 1存储过程可以有多个 ...

  7. mysql 视图 过程 函数_MySQL视图,函数,触发器,存储过程

    1. 视图 视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来, ...

  8. information_schema系列五(表,触发器,视图,存储过程和函数)

    information_schema系列五(表,触发器,视图,存储过程和函数) 这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点 ...

  9. 表、视图、存储过程、函数、触发器、事件

    表:里面存储的都是真实的数据 视图:就是一个表或者多个表的一个映射,一般只做查询使用.比如你想要的数据存在两个表里,但你查询时不想每次都写关联,那么你创建一个视图,以后只查询这个视图就可以(查询时视图 ...

  10. MySQL(视图、存储过程与函数、流程控制、触发器)

    第一章 视图 1 什么是视图 为了提高复杂的SQL语句的复用性和表的操作的安全性 ,MySQL数据库管理系统提高了视图特性,所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和 ...

最新文章

  1. task ':app:compileDebugJavaWithJavac'.错误
  2. 关于ansible 创建目录安装redis、nginx
  3. 实现串匹配的并行算法_5-1-KMP模式匹配
  4. 2019年春季学期第二周作业
  5. 数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码
  6. JavaScript 之 DOM中的三大对象
  7. 淘宝Web服务器Tengine正式开源
  8. mysql 索引建立标准_mysql索引规范
  9. kafka的connect实现数据写入到kafka和从kafka写出
  10. Python3内置模块2-logging(转)
  11. 从零学会SQL:入门(实操演示)
  12. SI 9000 及阻抗匹配学习笔记(四)
  13. 软件生命周期是指什么?
  14. MAC m1 PRO 安装安卓手机模拟器
  15. Ubuntu在物理机系统安装和teamviewer安装过程问题和解决的记录
  16. 观测风如何变成10m风
  17. JAVA中设置drwxr_x___权限_linux命令中chmod 777 以及drwxr-xr-x分别代表什么意思
  18. 使用css画太极,CSS画太极阴阳图
  19. 计算机编程专业有哪些好的大学?
  20. 百度、腾讯、阿里等互联网公司年终奖都发多少?找工作指南

热门文章

  1. gitlab+jenkins=自动化构建
  2. Java第十周的作业
  3. Codeforces 510 E. Fox And Dinner
  4. ubuntu 16.04 搭建无线共享热点(PC 无线直连Android移动终端 调试,监控屏幕)
  5. 初涉Runtime (一)
  6. 整理C# 二进制,十进制,十六进制 互转
  7. 大数据之-Hadoop伪分布式_启动YARN并运行MR程序---大数据之hadoop工作笔记0026
  8. MyCat分布式数据库集群架构工作笔记0007---Mycat登录
  9. 运行 lighttrack 遇到错误和解决方法
  10. 机器学习与计算机视觉(darknet编译)