您的位置:首页 > 数据库

其实很容易的SQL SERVER存储过程和触发器(10分钟入门教程)

2008-12-13 21:14 411 查看
(我说是是10分钟入门,事实上对我来说,真的就是老师讲的那十分钟,并没有过分夸张,然后我就知道了存储过程和触发器应该怎么写了,当然只是入门而已,但我恬恬缺这十分钟,如果没有人讲,只是自己看书的话,至少要好几天的时间了....)

一直以来,对SQL SERVER的存储过程和触发器都基本没有用到,只是偶尔从网上找几个简单的函数PASTE到我的SQL中用。自己写总是感觉缺点什么,前几天单位的培训讲了一天的SQL SERVER,看了老师写的存储过程,才发现原来存储过程也不是很难。

事实上,也是我一直没有坚持研究的原因,但是不能否认的是,有人讲和自己学,这其中的效率实在是无法相比。尤其是对于我们这种已经编过很多年的程序,但是却又静不下心来看书学习的人来说,很多东西其实就是需要有人在前面带那么一下,把那层纸捅破了,给大家一个概貌性的东西,余下的,就只是个时间和熟练性的问题了。

我认为的存储过程的纸就在这里:

1、变量的声明和使用

declare @var as varchar(50)

set var='abcd'

2、IF循环

if isnull(@prjid,0)=0
begin
print '没有找到prjid!!!'
return
end
else

begin

--必须在这里写一些代码,否则会报错。

end

3、游标的使用

declare curJD cursor for

select id,fzbh from _tzk

open curJD

fetch next from curJD into @jdID,@paperno

while @@FETCH_STATUS=0

BEGIN

--这里是一些处理代码

fetch next from curJD into @jdID,@paperno

END

close curJD

deallocate curJD

4、触发器的使用

关键在于inserted表和deleted表的使用

ALTER TRIGGER RoleInsert ON [dbo].[roleName]

AFTER INSERT

AS

declare @RoleID as bigint

set @RoleID=(select roleid from inserted)

insert into rolerule (roleid,menuid,pw)

select @roleid,menuid,0 from menus where menus.menuid not in

(select menuid from rolerule where roleid=@roleid)

update rolerule set pw=1 where menuid in (select menuid from menus where always=1)

and roleid in (select roleid from inserted)

然后有了这几个例子,其它的就是熟练的一个过程了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: