C语言SQL——存款和储蓄进程

  1. 为什么使用存储进程

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

     1) 数据不安全

      2)每一趟提交SQL代码都要经过语法编写翻译后在实践,影响应用程序的运作质量

      3) 互连网流量大

 

  1. 怎么着是储存进程

       
存款和储蓄进度是SQL语句和控制语句的预编译集合,保存在数据Curry,可由应用程序调用执行,而且允许用户注明变量、逻辑控制语句及别的强大的编制程序效率。保存在SQLServer中,通过名称和参数执行,也可2次去结果。对于仓库储存进度自身更赞成于把她清楚成方法。它里面能够惟有一条查询语句,也能够包括一比比皆是使用控制流的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 Server二〇〇五版本及以下,通过开头-
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:
用户定义的一定消息,最长为2伍十七个字符

    serverity:
与一定音讯相关联,表示用户定义的关键级别。用户可采纳的级别是0~18。数字越大,表示越严重。

     state : 表示错误的气象,
1~255中的值

     option:
错误的自定义选项,能够使一下任意一值

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

         
NOWAIT:将消息立刻发送给客户端

       SETERROR:将@@error值和
ERROR_NUMBELacrosse 值设置为msg_id 或四千, 不用考虑严重级别。

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