• SQL存储过程教程


     

    一直以来,对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、游标的使用

    1. declare curJD cursor for 
    2.     select id,fzbh from _tzk
    3. open curJD
    4. fetch next from curJD into @jdID,@paperno
    5. while @@FETCH_STATUS=0
    6. BEGIN
    7.   --这里是一些处理代码
    8.   fetch next from curJD into @jdID,@paperno
    9. END
    10. close curJD
    11. deallocate curJD

    4、触发器的使用

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

    1. ALTER   TRIGGER  RoleInsert  ON [dbo].[roleName] 
    2. AFTER  INSERT
    3. AS
    4. declare @RoleID as bigint
    5. set @RoleID=(select roleid from inserted)
    6. insert into rolerule (roleid,menuid,pw) 
    7. select @roleid,menuid,0 from menus where menus.menuid not in 
    8. (select menuid from rolerule where roleid=@roleid) 
    9. update rolerule set pw=1 where menuid in (select menuid from menus where always=1)
    10.     and roleid in (select roleid from inserted)

    然后有了这几个例子,其它的就是熟练的一个过程了 单独一个窗口  execute 存储过程名

  • 相关阅读:
    CF446C [DZY loves Fibonacci]
    [BZOJ2286] 消耗战
    [CF Round #278] Tourists
    BZOJ2553 [BJWC2011]禁忌
    NOI2018D2T1 屠龙勇士
    BZOJ2333 棘手的操作
    bzoj4196: [Noi2015]软件包管理器(树链剖分)
    bzoj1833: [ZJOI2010]count 数字计数(数位DP)
    bzoj1026: [SCOI2009]windy数(数位DP)
    bzoj3631: [JLOI2014]松鼠的新家(树上差分)
  • 原文地址:https://www.cnblogs.com/wangchuang/p/5806991.html
Copyright © 2020-2023  润新知