存储过程:能完成特定功能的一个或一组SQL语句集合。经编译后存储在服务器端的数据库中。

    作用:利用存储过程来加速SQL语句的执行,通过调用存储过程的名称,传入参数来执行特定的功能

    分类:存储过程分为系统存储过程和自定义存储过程

    • 系统存储过程:存储在master数据库中,其他数据库可以直接调用,并且不必在前面加上数据库名,创建存储过程时,这些系统存储过程在新的数据库中自动创建
    • 自定义存储过程:用户自己创建,为完成特定的功能而创建,可以传入参数,也可以有返回值,返回值一般用来表明存储过程是否执行成功。存储过程里面可以是一个操作也可以包括多个

    存储过程执行:execute/exec 存储过程名 参数列表(多个参数以逗号隔开)

    优点:

    • 提高应用程序的通用性和可移植性。可以多次调用,不必重新再去编写,维护人员可以随时修改
    • 可以更有效的管理数据库权限
    • 提高执行SQL的速度
    • 减轻服务器的负担

    缺点:

    • 需要人专门维护,占用数据库空间

    存储过程的语法:

    1. create proc 存储过程名
    2. @userid int,
    3. @username varchar(50)
    4. as
    5. begin
    6. --T-SQL 语句
    7. end
    8. go
    9. --创建一个无参数的存储过程 create/alter/drop
    10. create proc searchUserinfos
    11. as
    12. begin
    13. select userid,username,age from vUserinfos
    14. select * from DeptInfos
    15. end
    16. go
    17. --调用存储过程
    18. exec searchUserinfos
    19. --创建一个带参数的存储过程
    20. create proc AddUserInfo
    21. @UserName varchar(50)
    22. @UserPwd varchar(50)
    23. @Age int
    24. @DeptId int
    25. as
    26. begin
    27. declare @time datetime
    28. set @time='2021-1-9'
    29. insert into Userinfos(UserName,UserPwd,CreatTime,Age,DepId)
    30. values(@UserName,@UserPwd,@time,@Age,@DeptId)
    31. select * from UserInfos
    32. end
    33. --调用存储过程
    34. exec AddUserInfo 'lqq','123123',22,3
    35. --循环插入
    36. --创建一个带参数的存储过程
    37. create proc addOper
    38. @num int --循环次数
    39. @operID int --操作员id 100002
    40. as
    41. begin
    42. while @num > 1000
    43. begin
    44. INSERT INTO kbssacct.dbo.OPERATOR
    45. (OP_CODE, OP_CLS, OP_STATUS,
    46. EMPLOYEE_ID, INT_ORG, OPEN_DATE, CHANNELS,
    47. REMARK, CLOSE_DATE, EXEMPT_TIME, SPECIAL_RIGHTS,
    48. OPER_ORG, OPER_EXT_ATTR)
    49. VALUES (@operID + 1, N'0', N'0', N'测试操作员'+@operID, 7551, 20020419,
    50. N'@', N'', 0, N'1900-01-01 00:00:00.000', N'', 0, N'0');
    51. @num = @num + 1
    52. end
    53. end
    54. --调用存储过程
    55. exec addOper 1000,100002