SQL——存储过程
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——存储过程的更多相关文章
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
- SQL存储过程分页(通用的拼接SQL语句思路实现)
多表通用的SQL存储过程分页 案例一: USE [Community] GO /****** Object: StoredProcedure [dbo].[Common_PageList] Scrip ...
- SQL存储过程的调用及写法
调用函数: public class SqlProcess { ; public DataSet ReturnSet = null; public SqlDataAdapter adapter = n ...
- sql存储过程几个简单例子
导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些初学者来说也是比较抽象难理解的,本文我将通过几个实例来解析数据库中的sql存储过程,这样就将抽象的事物形象化,比较容易理解. 例1: cr ...
- SQL存储过程生成顺序编码
一.第一种方式 USE [WJKC]GO/****** Object: StoredProcedure [dbo].[Address_GetCode1] Script Date: 2016/3 ...
- SQL 存储过程入门(事务)(四)
SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...
- 在SQL存储过程中给条件变量加上单引号
在SQL存储过程中给条件变量加上单引号,不加语句就会出问题,以下就是在存储过程中将条件where设置成了动态变化的,给where赋完值再和前面的语句拼接,再execute(SQL) ), )), )+ ...
- SQL存储过程概念剖析
一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...
- sql 解析字符串添加到临时表中 sql存储过程in 参数输入
sql 解析字符串添加到临时表中 sql存储过程in 参数输入 解决方法 把字符串解析 添加到 临时表中 SELECT * into #临时表 FROM dbo.Func_SplitOneCol ...
- 查询数据库后台Block 的Sql存储过程
查询数据库后台Block 的Sql存储过程 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO /*记录SQL Server的阻塞情况 wang 200 ...
随机推荐
- Housse Robber II | leetcode
可以复用house robber的代码,两趟dp作为两种情况考虑,选最大值 #include <stdio.h> #define MAX 1000 #define max(a,b) ( ( ...
- 1058 N的阶乘的长度
1058 N的阶乘的长度 基准时间限制:1 秒 空间限制:131072 KB 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 输入N(1 <= N <= ...
- 转:ASP.NET MVC扩展之HtmlHelper辅助方法
1.什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,如下所示: namespace System.Web.Mvc.Html { public static class F ...
- 关于TCP传输速率的测量方法
人们非常关心下载速度,对于使用非包月宽带以及使用付费CDN的用户而言,这是典型的拿钱买时间的行为,我支付的费用越高,希望的下载速度越快,所使用的累积带宽越大.关于各种测速方法也是汗牛充栋了,本文介绍一 ...
- AJAX中UPDATEPANEL配合TIMER控件实现局部无刷新
首先加入UpdatePanel <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode= ...
- C++学了这么多年,你也许不知道为什么类定义要放在.h文件,类实现放在cpp文件。它们如何关联?
原文 http://blog.csdn.net/ithzhang/article/details/8119286 主题 C++ C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类 ...
- Android HttpClient基本使用方法
GET 方式 //先将参数放入List,再对参数进行URL编码 List<BasicNameValuePair> params = new LinkedList<BasicNameV ...
- 美团、点评、猫眼App下拉加载效果的源码分享
今天我准备拿大众点评.美团.猫眼电影三款App的实例来分享一下APICloud下拉加载这个模块的效果. 美团App下拉加载效果 以美团中的下拉酷似动画的萌萌着小人儿效果作为参考,来实现的一个加载模 ...
- TFS 2013 配置的时候,提示TF255466错误
TFS 2010 配置的时候,提示TF255466错误 花舞花落泪 2013-11-08 10:19:37 在验证是否可以安装 SharePoint 时的提示,Error [ System Chec ...
- 点云匹配和ICP算法概述
Iterative Closest Point (ICP) [1][2][3] is an algorithm employed to minimize the difference between ...