1. 为什么使用存储过程

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

1) 数据不安全

2)每次提交SQL代码都要经过语法编译后在执行,影响应用程序的运行性能

3) 网络流量大

2. 什么是存储过程

存储过程是SQL语句和控制语句的预编译集合,保存在数据库里,可由应用程序调用执行,而且允许用户声明变量、逻辑控制语句及其他强大的编程功能。保存在SQLServer中,通过名称和参数执行,也可一返回结果。对于存储过程我更倾向于把他理解成方法。它里面可以只有一条查询语句,也可以包含一系列使用控制流的SQL语句。

3. 存储过程的优点

1) 模块化呈现设计

2) 执行速度快,效率高

3) 减少网络流量

4) 具有良好的安全性

4. 存储过程的分类

1)系统存储过程

2)扩展存储过程(属于系统存储过程的一种)

3)用户自定义存储过程

5. 系统存储过程

它一般以"sp_"开头,是由SQL Server创建、管理和使用,它存放在Resource数据库中。类似C#语言类库中的方法,暂时先不考虑它是如何编写的,先了解常用的系统存储过程及调用方法。

常见的系统存储过程,见下一篇文章

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

6.  常用的扩展存储过程   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;

7. 用户自定义存储过程

语法:

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

8.  注意事项

存储过程的声明: 输入参数可以有默认值,输出参数也可以有默认值

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关键字

9. 处理存储过程中的错误

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)

SQL——存储过程的更多相关文章

  1. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  2. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...

  3. SQL存储过程的调用及写法

    调用函数: public class SqlProcess { ; public DataSet ReturnSet = null; public SqlDataAdapter adapter = n ...

  4. sql存储过程几个简单例子

    导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...

  5. SQL存储过程生成顺序编码

    一.第一种方式 USE [WJKC]GO/****** Object:  StoredProcedure [dbo].[Address_GetCode1]    Script Date: 2016/3 ...

  6. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  7. 在SQL存储过程中给条件变量加上单引号

    在SQL存储过程中给条件变量加上单引号,不加语句就会出问题,以下就是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) ), )), )+ ...

  8. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  9. sql 解析字符串添加到临时表中 sql存储过程in 参数输入

    sql 解析字符串添加到临时表中  sql存储过程in 参数输入 解决方法 把字符串解析 添加到 临时表中 SELECT * into #临时表   FROM dbo.Func_SplitOneCol ...

  10. 查询数据库后台Block 的Sql存储过程

    查询数据库后台Block 的Sql存储过程 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO /*记录SQL Server的阻塞情况 wang 200 ...

随机推荐

  1. iOS 拉伸图片

    UIEdgeInsets:四个参数,会填入上左下右几个值,这几个值,代表着距离边界的这几个点描绘的区域,是不会拉伸的.所以,到时候,计算清楚这几个值就可以了.

  2. 树莓派连接wifi

    使用树莓派,通过无线网卡连接wifi,再通过远程桌面或者ssh的连接树莓派比较方便,本文记录树莓派wifi如何设置. 参考链接: http://www.jianshu.com/p/b42e8d3df4 ...

  3. Proxy settings in TortoiseSVN and command line svn client

    The server file is created when you install TortoiseSVN, Eclipse or command-line Subversion. Use the ...

  4. Spring第12篇—— Spring对Hibernate的SessionFactory的集成功能

    由于Spring和Hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...

  5. 清除Outlook 2013中缓存的邮件地址

    1.删除相关文件(可能会没有访问权限): 路径:C:\Documents and Settings\user\用户名\Application Data\Microsoft\Outlook 文件名:ou ...

  6. 私有IP地址范围

    私有IP地址范围 有一部分的地址专门是用于内网的地址,包括: A类中 10.0.0.0/8 B类中 172.16.0.0/12 ~ 172.31.0.0/12 C类中 192.168.0.0/16 这 ...

  7. ios添加方法快捷方式

  8. hibernate3与ehcache-2.8.3配合使用,在多个SessionFactory实例的情况下出现“Another unnamed CacheManager already exists in the same VM”问题

    不想看分析过程的,直接拉到最下面看第4部分 1. 问题背景 由于某些原因,项目中使用了hibernate3与ehcache-2.8.3在配合使用,又由于某些原因,需要使用多个SessionFactor ...

  9. ali面试点滴

    1.喜欢问原理 最好问2句 回答8句 把相关的知识也加上 最好说一下优势与区别 2.sql优化 分库 分表 ssl https 3.jvm.高并发(事务.原子操作).设计模式(一定要烂熟于心) 4.访 ...

  10. Java nio 笔记:系统IO、缓冲区、流IO、socket通道

    一.Java IO 和 系统 IO 不匹配 在大多数情况下,Java 应用程序并非真的受着 I/O 的束缚.操作系统并非不能快速传送数据,让 Java 有事可做:相反,是 JVM 自身在 I/O 方面 ...