• 循环调用存储过程代码


    发现SQL存储过程中中批量循环 修改数据表中的字段内容时把历史的字段数值插入到另外的数据表中操作比在ASP中要简单多,速度快多了.实际业务应用范围可以是.从公司历史定单数据表中查询某段时间内的一批用户的所有定单记录.然后将其交易成功的定单判定为成功.ASP中用一个循环(用户名循环)+SQL存储过程中用一个循环(用户名在某段时间内所有ID循环).可以很顺利实现.查网络一大堆资料.居然发现没有循环调用同一SQL存储过程代码,特写出来.

    先写SQL存储过程中循环语句:
    declare @变量名a 变量类型m, @变量名b 变量类型n
    declare curTest cursor for select 变量a对应的字段名称,变量b对应的字段名称 from 数据表名称 where 后面跟条件语句
    open curTest
    fetch next from curTest into @变量名a,@变量名b
    while @@fetch_status = 0
    begin
    --这里可以执行别的代码.比如更改数据字段代码,插入数据字段代码
    --更新当前订单列表中的相关字段数据
    格式类似于
    update 数据表 set 字段A=传递参数A,字段B=游标读取出来的字段数值@变量名a where id=存储过程输入参数C
    --这里也可以执行别的存储过程,其存储过程变量可以是查询出来的字段数据值
    exec 系统中另外存储过程名称 @变量名a,@变量名b
    fetch next from curTest into @变量名a,@变量名b
    end
    close curTest
    deallocate curTest

    在写ASP中的循环调用同一存储过程代码一:
    for i=0 to ubound(ArrayUserName) 
      response.write("<br>第"&i&"次循环")
       Set MyComm = Server.CreateObject("ADODB.Command")
       MyComm.ActiveConnection = conn 'MyConStr是数据库连接字串
       MyComm.CommandText = "sp_UpdateOrderList" '指定存储过程名
       MyComm.CommandType = 4 '表明这是一个存储过程
       MyComm.Prepared = true '要求将SQL命令先行编译  
       '声明并赋值给存储过程参数
    '查询同一用户时间段内所有定单记录条件
       MyComm.Parameters.append MyComm.CreateParameter("@ClientUserName",200,1,20,CurrentOrderUser)
       MyComm.Parameters.append MyComm.CreateParameter("@OrderStartTime",200,1,20,OrderStartTime)
       MyComm.Parameters.append MyComm.CreateParameter("@OrderStartTime",200,1,20,OrderEndTime) 
    '要更新的字段数值
       MyComm.Parameters.append MyComm.CreateParameter("@OrderStatus",11,1,2,0)      
       MyComm.Parameters.append MyComm.CreateParameter("@OrderMemo",200,1,250,OrderMemo)   
    '更新返回状态
       MyComm.Parameters.append MyComm.CreateParameter("@ReturnFlag",3,2,4)   
       '立即执行存储过程
       MyComm.Execute()
       '根据存储过程返回参数统计打款状态更新记录总数
       if  MyComm.Parameters("@ReturnFlag").Value<>1 then
       Total=Total-1   
       end if
       '关闭存储过程语句
       Set MyComm = Nothing
    next

    在写ASP中的循环调用同一存储过程代码二:
    Set MyComm = Server.CreateObject("ADODB.Command")

    for i=0 to ubound(ArrayUserName) 
      response.write("<br>第"&i&"次循环")
       MyComm.ActiveConnection = conn 'MyConStr是数据库连接字串
       MyComm.CommandText = "sp_UpdateOrderList" '指定存储过程名
       MyComm.CommandType = 4 '表明这是一个存储过程
       MyComm.Prepared = true '要求将SQL命令先行编译  
       '声明并赋值给存储过程参数
    if i=0 then
       '查询同一用户时间段内所有定单记录条件
       MyComm.Parameters.append MyComm.CreateParameter("@ClientUserName",200,1,20,CurrentOrderUser)
       MyComm.Parameters.append MyComm.CreateParameter("@OrderStartTime",200,1,20,OrderStartTime)
       MyComm.Parameters.append MyComm.CreateParameter("@OrderStartTime",200,1,20,OrderEndTime) 
      '要更新的字段数值
       MyComm.Parameters.append MyComm.CreateParameter("@OrderStatus",11,1,2,0)      
       MyComm.Parameters.append MyComm.CreateParameter("@OrderMemo",200,1,250,OrderMemo)   
      '更新返回状态
       MyComm.Parameters.append MyComm.CreateParameter("@ReturnFlag",3,2,4)   
       '立即执行存储过程
       MyComm.Execute()
       '根据存储过程返回参数统计打款状态更新记录总数
       if  MyComm.Parameters("@ReturnFlag").Value<>1 then
       Total=Total-1   
       end if
    else
       '更新部分字段内容在变化的数据
       MyComm.Parameters("@ClientUserName")=CurrentOrderUser
       MyComm.Parameters("@OrderStatus".Value=OrderStatus      
       MyComm.Parameters("@OrderMemo").Value=OrderMemo
       '立即执行存储过程
       MyComm.Execute()
       '根据存储过程返回参数统计打款状态更新记录总数
       if  MyComm.Parameters("@ReturnFlag").Value<>1 then
       Total=Total-1   
       end if
    end if
    next
       '关闭存储过程语句
       Set MyComm = Nothing

  • 相关阅读:
    [译]:Orchard入门——媒体文件的添加与管理
    [译]:Orchard入门——给网站添加页面
    [译]:Orchard入门——给网站添加新博客
    [译]:Orchard入门——导航与菜单
    [译]:Orchard入门——构建你的第一个Orchard网站
    [译]:Orchard入门——Orchard控制面板概览
    [译]:Orchard入门——使用WebMatrix管理Orchard网站
    [译]:Orchard入门——手动安装Orchard
    [译]:Orchard入门——安装Orchard
    VS2013缺少报表工具
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306872.html
Copyright © 2020-2023  润新知