一直以来,对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)
然后有了这几个例子,其它的就是熟练的一个过程了 单独一个窗口 execute 存储过程名