本文从SQL存储过程的概念,优点,语法,创建技巧,调用等多方面介绍了SQL存储过程。
一、SQL存储过程的概念,优点及语法
定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
那么存储过程与一般的SQL语句有什么区别呢?
存储过程的优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权
存储过程的种类:
1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,
如 sp_help就是取得指定对象的相关信息
2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能
以下为引用的内容:
exec master..xp_cmdshell 'ping 10.8.16.1'
3.用户自定义的存储过程,这是我们所指的存储过程
常用格式
以下为引用的内容:
Create procedure procedue_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解释:
output:表示此参数是可传回的
with {recompile|encryption}
recompile:表示每次执行此存储过程时都重新编译一次
encryption:所创建的存储过程的内容会被加密
二、SQL存储过程学习:存储过程的创建
表book的内容如下
编号 书名 价格
001 C语言入门 $30
002 PowerBuilder报表开发 $52
实例1:查询表Book的内容的存储过程
createprocquery_book as select*frombook go execquery_book
|
实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额
Createprocinsert_book @param1char(10),@param2varchar(20),@param3money,@param4moneyoutput withencryption---------加密 as insertbook(编号,书名,价格)Values(@param1,@param2,@param3) select@param4=sum(价格)frombook go
|
执行例子:
declare@total_pricemoney execinsert_book'003','Delphi控件开发指南',$100,@total_price print'总金额为'+convert(varchar,@total_price) go
|
存储过程的3种传回值:
1.以Return传回整数
2.以output格式传回参数
3.Recordset
传回值的区别:
output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中
实例3:设有两个表为Product,Order,其表内容如下:
以下为引用的内容:
Product
产品编号 产品名称 客户订数
001 钢笔 30
002 毛笔 50
003 铅笔 100
order
产品编号 客户名 客户订金
001 南山区 $30
002 罗湖区 $50
003 宝安区 $4
请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
总金额=订金*订数,临时表放在存储过程中
代码如下:
Createproctemp_sale as selecta.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数*b.客户订金as总金额 into#temptablefromProductainnerjoinorderbona.产品编号=b.产品编号 if@@error=0 print'Good' else print'Fail' go
|
三、SQL存储过程学习:存储过程的调用
调用带参数存储过程的几种方式
1) 这也是最简单的方法,两个输入参数,无返回值,用于Insert,Update,Delete操作较多。
以下为引用的内容:
conn.Execute "procname varvalue1,varvalue2"
2) 如果要返回 Recordset 集:
以下为引用的内容:
set rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",conn
3) 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。
首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。
四、特殊的存储过程-触发器
1.触发器的概念及作用
触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:
(1) 强化约束(Enforce restriction)
触发器能够实现比CHECK 语句更为复杂的约束。
(2) 跟踪变化Auditing changes
触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
(3) 级联运行(Cascaded operation)。
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。
(4) 存储过程的调用(Stored procedure invocation)。
为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。
由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(Insert、 Update、 Delete)的多个触发器能够对同一种数据操作采取多种不同的处理。
总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。
2.触发器的种类
SQL Server 2000 支持两种类型的触发器:AFTER 触发器和INSTEAD OF 触发器。其中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(Insert Update Delete) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER 触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。
INSTEAD OF 触发器表示并不执行其所定义的操作(Insert、 Update、 Delete),而仅是执行触发器本身。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器。
分享到:
相关推荐
SQL存储过程学习SQL存储过程学习SQL存储过程学习
学习sql存储过程,一则关于存储过程的学习笔记
sql存储过程学习资料--总结的很全的 暴经典的资料啊
SQL 存储过程学习总结
SQL存储过程学习总结.pdf
详细讲解从新手学习sql存储过程,学完本文档后,您将会写自己的存储过程,大大的加快数据的查询速度。要学的很好哦。
SQL存储过程学习总结归类.pdf
内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...
学习是自己的事情,有时候忘了自己要做什么,或者正在做些什么,只是在这个过程中我们都体会着进步和挑战。还没有体会到,那怕是一点的成功,所以我们必须努力……
SQL存储过程习题,SQL触发器习题,SQL习题,基础语法,与W3School类似,初学者学习使用。
sql数据库存储过程学习,详细讲解,适合初学者和提高者...
主要介绍了SQLServer存储过程中事务的使用方法,简短的代码带大家更好的学习使用SQLServer存储过程中事务,感兴趣的小伙伴们可以参考一下
SQL 存储过程 与 XML 编程,很适合初学者学习。
存储过程另类写法,分页 SQLServer存储过程.
SQL SERVER 存储过程学习笔记(自己写的希望能帮助到你们,如果有地方写的不好,请大家见谅。)
文档记录了SQL Server在存储运用时的语法,需要有一定的SQL语言学习基本,本文档只是做了梳理与总结,以便查看和识记。
sql server 存储过程全英文学习
存储过程 结合 触发器流水 账号 实例 存储过程 结合 触发器流水 账号 实例
sql存储过程简单介绍,学习。1234567896541232145664477
Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目,里面有丰富的SQL基本语法学习和SQL练习题以及存储过程非常适合新手和找工作的人群