迴圈調用預存程序代碼

來源:互聯網
上載者:User

發現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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.