存储过程

 存储过程:  

存储过程是大型数据库系统中,一组完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数),来执行它.

存储过程其实就是我们将我们要使用的查询语句事先写到我们的数据库中,当我们使用的时候直接调用存储过程的名字就可以了。这样很方便快捷,减少了工作量。我觉得他也有一些不足,必须对存储过程作用十分清楚,不能误用存储过程,否则将会对数据造成影响

一存储过程分类

1系统存储过程

以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。

2本地存储过程

用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所 说的存储过程就是指本地存储过程。

3临时存储过程

分为两种存储过程:

(1)是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;

(2)是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。

4远程存储过程

在SQL Server2005中,远程存储过程是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。

5扩展存储过程

扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。

二 下面我们简单介绍一下它的创建:

当大家新建存储过程后会出现很多的代码,不要慌,这正是数据库设计者人性化的设计,这些代码是我们设计存储过程的模板。

三 下面我以实例为大家介绍一下它的使用

在数据库中新建存储过程,设置好命名、用到的参数、以及语句

存储过程[dbo].[PROC_DeleteCard]的作用是向T_DeleteCard添加信息,同时删除T_Card中CardNO的值为@CardNO.

USE [Charge]
GO
/****** Object:  StoredProcedure [dbo].[PROC_DeleteCard]    Script Date: 08/08/2013 10:34:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[PROC_DeleteCard]
     @CardNO int,
	 @StudentNO int,
	 @ReturnCash int ,
	 @DeleteDate char(20),
	 @DeleteTime char(15),
	 @Head char(10)
AS
BEGIN
	  insert into T_DeleteCard (CardNO,StudentNO,ReturnCash,DeleteDate ,DeleteTime,Head)values(@CardNO ,@StudentNO , @ReturnCash, @DeleteDate, @DeleteTime ,@Head )
	  delete  T_Card WHERE CardID =@CardNO 
      --update T_Card SET Remark ='注销' ,States ='下机'  where CardID  =@CardNO 
		 

END

调用:

 Dim cmdText As String = "PROC_DeleteCard"
        Dim i As Integer
        '将实体中的信息赋值给参数组合
        Dim paras As SqlParameter() = {New SqlParameter("@CardNO", enCard.CardID),
                                       New SqlParameter("@StudentNO", enCard.StudentID),
                                       New SqlParameter("@ReturnCash", enCard.Cash),
                                       New SqlParameter("@DeleteDate ", enCard.CardDate),
                                       New SqlParameter("@DeleteTime", enCard.CardTime),
                                       New SqlParameter("@Head", enCard.UserName)
                                       }
        i = SqlHelperDAL.ExecuteNoQuery(cmdText, CommandType.StoredProcedure, paras) '调用方法


总结:

存储过程将一些SQL语句存放在数据库中,等待着我们的使用。但是如果大量使用,会给维护系统带来麻烦。调试比较麻烦。重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译。

存储过程非常方便快捷,但是也会给我们带来一些麻烦,要酌情使用。

原文地址:https://www.cnblogs.com/jiangu66/p/3246630.html