批量调用存储过程

上一篇 / 下一篇  2010-04-08 14:01:04 / 个人分类:SQL2000/2005

发现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


TAG:

 

评分:0

我来说两句

日历

« 2024-04-09  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 55359
  • 日志数: 96
  • 建立时间: 2009-12-04
  • 更新时间: 2010-05-25

RSS订阅

Open Toolbar