SQL——存储过程

  1. 干什么用存储过程

     应用程序通过T-SQL语句到服务器的经过是匪安全之。

     1) 数据未安全

      2)每次交SQL代码都设透过语法编译后每当执行,影响应用程序的运转性能

      3) 网络流量大

 

  1. 咦是储存过程

       
存储过程是SQL语句和决定语句的预编译集合,保存于数据库里,可由于应用程序调用执行,而且允许用户声明变量、逻辑控制语句及其它强大的编程功能。保存在SQLServer中,通过名称与参数执行,也不过同等赶回结果。对于仓储过程本身再赞成被把他知成道。它其中可以但发同样修查询语句,也得以涵盖一多级以控制流的SQL语句。

 

  1. 仓储过程的亮点

     1) 模块化呈现设计

     2) 执行进度快,效率高

     3) 减少网络流量

     4) 具有得天独厚的安全性

  1. 积存过程的分类

      1)系统存储过程

      2)扩展存储过程(属于系统存储过程的等同栽)

      3)用户从定义存储过程

 

  1. 网存储过程

      它一般以”sp_”开头,是由于SQL
Server创建、管理及采取,它存放于Resource数据库被。类似C#言语类库中的方,暂时先不考虑它是什么编写的,先了解常用的系统存储过程与调用方法。

     常见的网存储过程,见下同样首文章

     调用方法:exec[ute]  存储过程名  [参数值]

 

  1.  常用之扩展存储过程  
    xp_cmdshell

     xp_cmdshell
 它可做到DOS命令下之有操作。

     exec  xp_cmdshell  DOS命令
 [no_output]

     说明
 no_output是可选参数,表示设置实行DOS命令后是否输出返回信息。

     示例: exec xp_cmdshell  ‘mkdir
 D:\newdir’  output

     强调:
因为用户可经xp_cmdshell对操作系统做片操作,如果该存储过程叫黑客使用对操作系统做操作就麻烦了,所以便会把xp_cmdshell
关闭掉:

     方法一: 

     SQL Server 2008本和以上,
通过数据库右击  选择“方面”   ,在下拉列表中摘 “服务器安全‘ ,
下面的列表项中得望xmcmdshellEnable 设置。

     SQL Server2005本子与以下,通过开-
SQLServer- 外围设备查找

     方法二:

    关闭xp_cmdshell

    EXEC sp_configure ‘show advanced
options’, 1;

    RECONFIGURE;

    EXEC sp_configure ‘xp_cmdshell’,
1;

    RECONFIGURE;

    开启xp_cmdshell

    EXEC sp_configure ‘show advanced
options’, 1;

    RECONFIGURE;

    EXEC sp_configure ‘xp_cmdshell’,
0;

     RECONFIGURE;

 

  1. 用户从定义存储过程

   语法:

   create  proc[edure]
存储过程叫

            @参数1  数据类型 = 默认值
output, 

            ……

            @参数n  数据类型 = 默认值
output

  as  

              <SQL 语句>

  go

 

 一个完结的囤过程包含以下3局部:

   1) 输入参数、输出参数

   2)
在仓储过程被实践的T-SQL语句

   3) 存储过程的返回值

中间输入参数允许有默认值。

    删除存储过程

    drop proc  存储过程叫

    if  exists (select * from sysobject
where name = 存储过程叫)

             drop proc
 存储过程叫

    go

 

  1.  注意事项

       存储过程的宣示:
输入参数可以来默认值,输出参数为得有默认值

      create proc  usp_name

                  @age int = 5,

       @name
varchar(10)        

       as 

           ……

       go

        执行语句:  

           exec  pr_name  18 ,
‘zm’

            exec  default  , ‘zm’

            exec  @name = ‘zm’

       说明:
为了调用方便,最好将有默认值的囤积过程参数列表放到最后。

 

       带输出参数的蕴藏过程

       create proc usp_name

               @num1  int,

               @sum int output

       as

             <SQL语句>

       go 

     调用存储过程 

      declare @sum int 

      exec  usp_name  5, @sum
 output

      注意,
调用含输出参数的囤积过程参数后总得带output关键字

 

  1. 拍卖存储过程被之缪

    raiserror  ( {msg_id  | msg_str}
{, serverity, state } [with option [,……]])

    其中:

    msg_id:
在sysmessage系统表中指定用户定义错误信息

    msg_str:
用户定义的一定信息,最丰富吗255单字符

    serverity:
与特定信息相互关联,表示用户定义之要紧级别。用户可选用的级别是0~18。数字更是老,表示进一步严重。

     state : 表示错误的状态,
1~255中的值

     option:
错误的自定义选项,可以要一下肆意一价

    LOG: 在Microsoft SQl Server
数据库引擎示例的错误日志与应用程序日志中著录错误

         
NOWAIT:将信息就发送给客户端

       SETERROR:将@@error值和
ERROR_NUMBER 值设置也msg_id 或5000, 不用考虑严重级别。

          例如: raiserror (‘错误信息’,
16,1)

相关文章