职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 995|回复: 1

[转载]sql server 存储过程及触发器

[复制链接]
cayean 发表于 2007-6-4 14:37 | 显示全部楼层 |阅读模式
一直都想找个时间研究一下,今天花了一天时间去实践了一下,非常有用。可以说是数据库里面的精华吧。还好我今天去弄了几下,虽说都是些简单的语句,但是最起码知道以后在项目该怎么去做了。 闲话少说。进入正题。

1.创建SQL存储过程:
  CREATE PROCEDURE stu_proc1//指定过程名
  @Sno varchar(50) ='7000803068',//定义参数以及默认值
AS//执行SQL语句
  select * from Student
  where Sno=@Sno
GO

Declare @XXX声明变量
set @XXX=XXX设定变量值
同时里面也有if else while等语句不过得加上begin end

2.执行存储过程
Execute stu_proc1 @Sno='XXX' @Sname='XXXX'

其实可以把存储过程看成一个C语言的函数。函数名是存储过程名,形参是也是里面的参数,里面还有局部变量,同时也可设定值。也可以返回值,用return语句。里面可以用到if else,while语句。但是C里面的函数功能会更大,不能等同,只能做比较。写存储过程也有点像写个函数一样。

同时在JAVA语言中也可以调用存储过程,类似C里调用函数。设定形参值。

3.JDBC中调用存储过程
CallableStatement对象
String sql=\"{call stu_proc1(?,?)}\";
String firstVal=\"\";
String secondVal=\"\";
Class.forName();
Connection conn=DriverManager.getConnection(\"\",\"\",\"\");
CallableStatement stmt=conn.prepareCall(sql);
stmt.setString(1,firstVal);
stmt.setString(2,secondVal);
ResultSet rs=stmt.executeQuery();

存储过程可以提高访问数据库的性能和速度。
触发器是一种特殊的存储过程,主要用于update,insert,delete这三种语句,主要是处理表与表之间的关联,也就是约束性吧。同时有二个表inserted(插入表),deleted(删除表)而update可以看成先删除,然后插入.比如,当要删除一个学生时,同时该学生的选课记录也是要删除的,这时可以在学生表进建个触发器就可以实现这种功能。

触发器就是可以进行关联操作,而单单SQL语句不能做到这一点。

CREATE TRIGGER StudentDelete ON [dbo].[Student]
FOR DELETE
AS
delete from SC where SC.Sno=(select Sno from deleted)

语句形式跟存储过程是一致的,因为触发器本身就是一种存储过程.
kjzh123 发表于 2007-7-12 00:53 | 显示全部楼层
挺酷,多发点
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-15 17:27 , Processed in 0.137583 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表