zoukankan      html  css  js  c++  java
  • 创建并在项目中调用SQLSERVER存储过程的简单示例

    使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。
    创建存储过程
      和数据表一样,在使用之前需要创建存储过程,它的简明语法是:

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

    例:

    引用:
    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程序里的调用。

    引用:
    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项目中经常会使用到,但使用存储过程来做验证可能不多,那么做例子,写一个简单的用户登录验证的存储过程。

    引用:
    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关键字。
    引用:
    Dim adoComm
    ’// 创建一个对象,我们用来调用存储过程
    Set adoComm = CreateObject("ADODB.Command")
    With adoComm
    ’// 设置连接,设 adoConn 为已经连接的 ADODB.Connection 对象
    .ActiveConnection = adoConn
    ’// 类型为存储过程,adCmdStoredProc = 4
    .CommandType = 4
    ’// 存储过程名称
    .CommandText = "upUserLogin"
    ’// 设置登录名称
    .Parameters.Item("@strLoginName").Value = "***"
    ’// 设置登录密码
    .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

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

    引用:
    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程序的调用。

    引用:
    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

    最后让我们看看 SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的数据?

    首先需要知道“另一个存储过程”的结果集的所有列的类型。 
    假设“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集
    如下
    CREATE PROCEDURE sp2
    AS
    DECLARE @t table(a int,b int,c int)

    INSERT INTO @t(a,b,c)
    EXEC sp1

    SELECT * FROM @t
  • 相关阅读:
    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5935 Car 【模拟】 (2016年中国大学生程序设计竞赛(杭州))
    HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
    HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    【转】LaTeX 符号命令大全
    HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
    HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)
    数据结构之稀疏矩阵
    C++中引用(&)的用法和应用实例
  • 原文地址:https://www.cnblogs.com/qixu/p/6053724.html
Copyright © 2011-2022 走看看