`
shenmin1984
  • 浏览: 62306 次
  • 性别: Icon_minigender_2
  • 来自: 安徽
社区版块
存档分类
最新评论
阅读更多

原创:数据库】SQL SERVER数据库开发之存储过程应用

标  题:SQL SERVER数据库开发之存储过程的应用
作  者:栽培者
日  期:2005-12-27
说  明:由于个人能力有限,文章中难免会出现错误或遗漏的地方,敬请谅解!同时欢迎你指出,以便我能及时修改,以免误导下一个看官。最后希望本文能给你带来一定的帮助。


  可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高。

QUOTE:
SQL SERVER 联机丛书中的定义:
  存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。
  可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。
  也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。

  要使用存储过程,首先我们必需熟悉一些基本的T-SQL语句,因为存储过程是由于一组T-SQL语句构成的,并且,我们需要了解一些关于函数、过程的概念,因为我们需要在应用程序中调用存储过程,就像我们调用应用程序的函数一样,不过调用的方法有些不同。

  下面我们来看一下存储过程的建立和使用方法。

一、创建存储过程

  和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是:

QUOTE:
CREATE PROC 存储过程名称
    [参数列表(多个以“,”分隔)]
AS
SQL 语句

例:

QUOTE:
CREATE PROC upGetUserName
@intUserId        INT,
@ostrUserName NVARCHAR(20) OUTPUT                -- 要输出的参数
AS
BEGIN
        -- 将uName的值赋给 @ostrUserName 变量,即要输出的参数
        SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserId
END

  其中 CREATE PROC 语句(完整语句为CREATE PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和 @ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。

二、存储过程的调用

  之前我们已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。存储过程建立好了,接下来就是要在应用程序里调用了,下面看一下在ASP程序里的调用。

QUOTE:
Dim adoComm
'// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
        '// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
        .ActiveConnection = adoConn
        '// 类型为存储过程,adCmdStoredProc = 4
        .CommandType = 4
        '// 存储过程名称
        .CommandText = "upGetUserName"
        '// 设置用户编号
        .Parameters.Item("@intUserId").Value = 1
        '// 执行存储过程
        .Execute
       
        '// 取得从存储过程返回的用户名称
        Response.Write "用户名:" & .Parameters.Item("@ostrUserName").Value
End With
'// 释放对象
Set adoComm = Nothing

  通过以上两步,我们已经可以创建和使用简单的存储过程了。下面我们来看一个稍微复杂点的存储过程,以进一步了解存储过程的应用。

三、存储过程的实际应用

  用户登录在ASP项目中经常会使用到,相信很多朋友也都做过类似的系统,但使用存储过程来做验证朋友可能不多,那么我们就以它来做例子,写一个简单的用户登录验证的存储过程。

QUOTE:
CREATE PROC upUserLogin
@strLoginName        NVARCHAR(20),
@strLoginPwd        NVARCHAR(20),
@blnReturn                BIT OUTPUT
AS
-- 定义一个临时用来保存密码的变量
DECLARE @strPwd NVARCHAR(20)
BEGIN
        -- 从表中查询当前用户的密码,赋值给 @strPwd 变量,下面要对他进行比较
        SELECT @strPwd=uLoginPwd FROM uUser WHERE uLoginName=@strLoginName

        IF @strLoginPwd = @strPwd
                BEGIN
                        SET @blnReturn = 1
                        -- 更新用户最后登录时间
                        UPDATE uUser SET uLastLogin=GETDATE() WHERE uLoginName=@strLoginName
                END
        ELSE
                SET @blnReturn = 0
END

  用户登录的存储过程建立好了,现在在程序里试一下吧。注意,在一个区域内如果有多条语句时,必需使用BEGIN...END关键字。

QUOTE:
Dim adoComm
'// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
        '// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
        .ActiveConnection = adoConn
        '// 类型为存储过程,adCmdStoredProc = 4
        .CommandType = 4
        '// 存储过程名称
        .CommandText = "upUserLogin"
        '// 设置登录名称
        .Parameters.Item("@strLoginName").Value = "admin"
        '// 设置登录密码
        .Parameters.Item("@strLoginPwd").Value = "123456"
        '// 执行存储过程
        .Execute
       
        '// 判断是否登录成功
        If .Parameters.Item("@blnReturn").Value = 1 Then
                Response.Write "恭喜你,登录成功!"
        Else
                Response.Write "不是吧,好像错了哦。。。"
        End If
End With
'// 释放对象
Set adoComm = Nothing

  通过以上的步骤,简单用户登录验证过程也做完了,现在只要把它整合到程序中就可以实现简单的用户登录验证了,关于其他细节就由你自己来处理了。
  上面介绍的两个存储过程都是只返回一个值的,下面我们来看一个返回一个记录集的存储过程。

QUOTE:
CREATE PROC upGetUserInfos
@intUserGroup        INT
AS
BEGIN
        -- 从数据库中抽取符合条件的数据
        SELECT uName,uGroup,uLastLogin FROM uUser WHERE uGroup=@intUserGroup
        -- 插入一列合计
        UNION
        SELECT '合计人数:',COUNT(uGroup),NULL FROM uUser WHERE uGroup=@intUserGroup
END

  现在我们来看一下ASP程序的调用。

QUOTE:
Dim adoComm
Dim adoRt
'// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
Set adoRs = CreateObject("ADODB.Recordset")
With adoComm
        '// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
        .ActiveConnection = adoConn
        '// 类型为存储过程,adCmdStoredProc = 4
        .CommandType = 4
        '// 存储过程名称
        .CommandText = "upGetUserInfos"
        '// 设置用户组
        .Parameters.Item("@intUserGroup").Value = 1
        '// 执行存储过程,和以上几个例子不同,这里使用RecordSet的Open方法
        adoRs.Open adoComm
        '// 显示第一个值
        Response.write adoRs.Fields(0).Value
End With
'// 释放对象
Set adoRs = Nothing
Set adoComm = Nothing

  怎么样,是不是也很简单呢,不过存储过程的用处不仅仅只有这些,他还有更强大的功能,比如使用游标、临时表来从多个表,甚至是多个数据库中调用数据,然后返回给用户,这些你可以在使用过程中慢慢的去发掘。

  好了,存储过程应用就先介绍到这里,如果你对本文有任何疑问,欢迎跟贴提出,我将尽力给予解答。下次我将给大家介绍触发器的应用。
四、存储过程的运行
在查询分析器中:
exec  存储过程名 参数列表
单击运行即可以运行该存储过程。
注意:要选择存储过程所在的数据库,否则找不到指定的存储过程。
分享到:
评论

相关推荐

    数据库存储过程资料收集

    数据库存储过程是数据库管理系统提供的一种高级程序设计语言,它允许用户在数据库中定义一组操作,这些操作可以包含SQL语句、控制流语句以及数据处理逻辑。存储过程是数据库中的一个重要概念,它对于提高数据库应用...

    启动SQL Server时自动执行存储过程

    启动 SQL Server 时自动执行存储过程可以实现自动化维护、数据初始化、统计信息收集等操作,可以大大提高 SQL Server 的自动化程度和可维护性。 相关知识点: *automatically executing stored procedures when ...

    存储过程华为的存储过程

    在IT行业中,存储过程是数据库管理系统(DBMS)中预编译的SQL语句集合,它们通常用于执行复杂的数据库操作,提高数据访问效率,并提供业务逻辑的封装。华为作为全球领先的ICT解决方案提供商,其数据库系统自然也支持...

    Java调用存储过程--传入集合参数

    在这个场景中,我们将从Java应用程序收集一系列用户数据,将其转换为Oracle数组,然后调用一个预定义的存储过程进行批量更新操作。 #### 五、注意事项与优化建议 - **类型匹配**:确保Java对象属性与数据库对象...

    oracle存储过程练习题[收集].pdf

    它不仅仅提供了存储、查询、更新和管理数据的功能,还允许用户通过存储过程来扩展其功能,实现业务逻辑的自动化处理。学习和掌握Oracle存储过程的编写对于数据库开发人员来说是一项必备的技能。本文档中提供的五个...

    运用存储过程修改数据库

    存储过程是数据库中预编译的SQL语句集合,可以用于执行复杂的数据操作,比如修改、插入、删除等。本话题将详细探讨如何运用存储过程来修改数据库,并结合JavaScript(JS)和AJAX技术在前台与后台交互实现这一功能。 ...

    搜集的oracle存储过程资料

    Oracle存储过程是数据库管理系统Oracle中的一种重要特性,用于在数据库中执行复杂的业务逻辑和数据处理。存储过程由一系列PL/SQL语句组成,可以被反复调用,提高了代码的复用性和执行效率。以下是对Oracle存储过程...

    Oracle存储过程

    Oracle存储过程是数据库管理系统Oracle中的一种重要特性,它允许开发者编写和存储PL/SQL代码块,以便在需要时高效地执行。存储过程是预编译的,并且在SQL内存中优化,这使得它们在提高效率和性能方面具有显著优势。 ...

    sybase的存储过程编写经验和方法

    - **统计信息:** 使用`SET STATISTICS IO ON`和`SET STATISTICS TIME ON`命令收集存储过程执行时的I/O和时间统计信息,有助于分析和优化存储过程。 - **执行计划缓存:** Sybase会缓存执行计划,重复执行相同的存储...

    如何用Toad调试存储过程、触发器

    在Oracle 10g及以后的版本中,引入了新的接口JDWP(Java Debug Wire Protocol)用于调试PL/SQL和存储的Java过程。然而,Toad同时支持JDWP和DBMS_DEBUG接口,并且推荐在不涉及Java代码调试时继续使用DBMS_DEBUG,因为...

    Oracle表字段更新存储过程效率优化思路

    在Oracle数据库管理中,存储过程是预编译的SQL语句集合,用于执行特定的数据库操作,例如数据处理、业务逻辑等。优化存储过程对于提升系统性能至关重要,尤其是在大规模数据处理场景下。本文将深入探讨Oracle表字段...

    MySQL存储过程练习[收集].pdf

    MySQL 存储过程实践指南 MySQL 存储过程是 MySQL 数据库中的一种程序化对象,它允许用户根据自己的需求定义一个或多个任务的执行顺序。存储过程可以实现复杂的业务逻辑、提高数据库的性能和安全性。本文将通过多个...

    存储过程自动化测试(论文)

    本文是关于存储过程自动化测试的研究性论文,主要讨论了如何利用JUnit框架和XML技术实现存储过程的自动化测试和回归测试。文章强调了数据库存储过程测试的复杂性以及现有的数据库产品提供的工具的局限性,如它们无法...

    网上收集的存储过程学习资料

    存储过程是数据库管理系统中预编译的SQL语句集合,它们可以封装复杂的业务逻辑,提高数据操作的效率和安全性。在C#中调用存储过程是常见的数据库交互方式,能够减少网络传输的数据量,提高应用性能。下面我们将深入...

    sql2000 利用存储过程导出excel

    标题“sql2000 利用存储过程导出excel”指的是在SQL Server 2000中使用存储过程来生成Excel文件的过程。这个技术在数据处理和分析时非常有用,因为它允许用户直接从数据库中导出数据到Excel格式,方便进一步的数据...

    oracle 存储过程 databaselink 收集

    ### Oracle存储过程与Database Link详解 #### 一、Oracle存储过程概述 在Oracle数据库中,存储过程是一种预先编译并存储在数据库中的SQL程序块,它可以接收输入参数、返回输出参数,并执行复杂的业务逻辑。存储...

    sql导出XML存储过程

    在网上搜集sql导出XML的片段整理后组成了存储过程

    ORACLE数据库相关资料(性能优化、存储过程)

    本资料包聚焦于两个关键领域:性能优化和存储过程。 **性能优化** Oracle数据库性能优化是确保系统高效运行的关键。这涉及到多个层面,包括SQL查询优化、索引策略、表空间管理、内存结构调优以及数据库架构设计。...

    数据库存储过程调试工具

    几年前,在网上搜集资料的时候,突然搜到有关存储过程调试的一些api,名字叫dbgrpc,这个东西我估计很多人都不知道,我也是一不小心发现的,于是就开始研究这方面的东西。刚开始挺难的,一直找不到北,因此也搁置了...

    华为存储日志收集工具

    在IT运维过程中,日志收集是排查问题、优化系统性能、确保数据安全的重要环节。华为的这款工具能够提供全面的日志数据,帮助用户快速定位并解决潜在的问题。 日志收集是存储管理中的关键任务,它涉及以下几个主要...

Global site tag (gtag.js) - Google Analytics