sql编程存储过程视图触发器_第1页
sql编程存储过程视图触发器_第2页
sql编程存储过程视图触发器_第3页
sql编程存储过程视图触发器_第4页
sql编程存储过程视图触发器_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京传智播客教育数据库开发及ADO.Net讲师:邹华栋智言在你生命的最初30年中,你养成习惯。在你生命的最后30年中,你的习惯决定了你。视图_View基于书籍表和类别表,’产生’一张虚拟表—视图selectb_idASID,c_nameas类别,b_titleas书名fromBook,Categorywhereb_cid=c_id视图概述视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同:数据表是实际存储记录的地方,然而视图并不保存任何记录,它存储的实际上是查询语句相同的数据表,根据不同用户的不同需求,可以创建不同的视图(不同的查询语句)优点:筛选表中的行防止未经许可的用户访问敏感数据降低数据库的复杂程度局部变量_先声明再赋值

声明局部变量

DECLARE

@变量名数据类型DECLARE@bookNamevarchar(20)DECLARE@bIdint

赋值

SET@变量名=值--set用于普通的赋值

SELECT@变量名=值--用于从表中查询数据并赋值例如:SET@bookName=‘家宝’SELECT@bookName=b_titleFROMBookWHEREb_id=2例:declare@moneymoney--声明变量set@money=2000–赋值select@money–查询变量值请从Book表中找出比书名为.NETMVC3价格小的书籍信息declare@momoney--声明变量select@mo=b_moneyfromBookwhere

b_title=‘.NETMVC3‘--赋值select*fromBookwhereb_money<@mo--使用变量变量种类变量分为:局部变量:局部变量必须以标记@作为前缀,如@Ageint局部变量:先声明,再赋值全局变量(系统变量):全局变量必须以标记@@作为前缀,如@@version全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值全局变量变量含义@@ERROR最后一个T-SQL错误的错误号@@IDENTITY最后一次插入的标识值@@LANGUAGE当前使用的语言的名称@@MAX_CONNECTIONS可以创建的同时连接的最大数目@@ROWCOUNT 受上一个SQL语句影响的行数@@SERVERNAME本地服务器的名称@@TRANSCOUNT 当前连接打开的事务数@@VERSION

SQLServer的版本信息IFELSEIF(条件表达式)

BEGIN--相当于C#里的{

语句1

……

END--相当于C#里的}ELSE

BEGIN

语句1

……

END问题:统计并显示所有书籍价格(b_money)的平均值,如果平均价格在50以上,显示“A“,并显示平均价格最高的2本书;如果在50以下,显示“B“,并显示平均价格最少的2本书。分析:第一步,统计平均价格存入临时变量;第二步,用IF-ELSE判断;例:WHILE循环WHILE(条件表达式)

BEGIN

--相当于C#里的{

语句……

BREAK

END--相当于C#里的}问题:

书籍价格上涨,确保每本书价格最少50元。提价:先每本都加2元,看是否都价格达标,如果没有全部达标,每本再加2元,再看是否都达标,如此反复提价,直到所有书都达标为止。分析:

第一步,统计没达标的本数;

第二步,如果有书没通过,提价;

第三步,循环判断。例:事务-为什么需要事务如,借钱问题:假定钱从A转到B,至少需要两步:A的资金减少然后B的资金相应增加

UPDATEbankSETuMoney=uMoney-1000WHEREuName='家宝‘

@@errorUPDATEbankSETuMoney=uMoney+1000WHEREuName='奥巴马‘@@error--查看结果。SELECT*FROMbank会否出问题?什么是事务(Transaction)指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)--也就是由多个sql语句组成,必须作为一个整体执行这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行语法步骤:开始事务:BEGINTRANSACTION事务提交:COMMITTRANSACTION事务回滚:ROLLBACKTRANSACTION判断某条语句执行是否出错:全局变量@@ERROR;@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;例:SET@errorSum=@errorSum+@@error存储过程存储过程就像数据库中运行方法(函数)和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果。前面学的ifelse/while/变量等,都可以在存储过程中使用优点:执行速度更快允许模块化程序设计提高系统安全性减少网络流通量系统存储过程由系统定义,存放在master数据库中名称以“sp_”开头或”xp_”开头自定义存储过程由用户在自己的数据库中创建的存储过程系统存储过程系统存储过程说明sp_databases列出服务器上的所有数据库。sp_helpdb报告有关指定数据库或所有数据库的信息sp_renamedb更改数据库的名称sp_tables返回当前环境下可查询的对象的列表sp_columns回某个表列的信息sp_help查看某个表的所有信息sp_helpconstraint查看某个表的约束sp_helpindex查看某个表的索引sp_stored_procedures列出当前环境中的所有存储过程。sp_password添加或修改登录帐户的密码。sp_helptext显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。创建存储过程定义存储过程的语法

CREATE

PROC[EDURE]存储过程名@参数1数据类型=默认值

OUTPUT,@参数n数据类型=默认值OUTPUT

AS

SQL语句参数说明:参数可选参数分为输入参数、输出参数输入参数允许有默认值EXEC

过程名

[参数]调用带参数的存储过程无参数的存储过程调用:Execpro_GetAge有参数的存储过程两种调用法:EXECproGetPageData60,55按次序EXECproGetPageData@labPass=55,@writtenPass=60--参数名参数有默认值时:EXECproGetPageData

--都用默认值EXECproGetPageData

1--页容量(@pageSize)默认值EXECproGetPageData

1,5--不用默认值问题:如果我只想设置页容量(第二个参数),页码使用默认值呢?怎么办?存储过程中使用输出参数如果希望在存储过程中查询当前页对应的结果集,而且还想产生总页数呢?触发器触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。触发器可以用于SQLServer约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。那究竟何为触发器?在SQLServer里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。

常见的触发器有三种:分别应用于Insert,Update,Delete事件常用语法CREATE

TRIGGER

triggerName

ONTablefor

UPDATE|INSERT|DELETEASbegin…end触发器-更新CREATE

TRIGGERtestForFunONdbo.Categoryfor

UPDATEASbeginselect*frombookendupd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论