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