簡體   English   中英

將VBA轉換為SQL Server存儲過程

[英]Convert vba to SQL Server stored procedure

我有一個Access2003數據庫,該數據庫具有一個從SQL Server數據庫鏈接的表。 我有此Access vba,可以更新該SQL Server表中的列。 每月清除表並導入新的記錄集,每月的記錄量范圍為300,000到450,000。

此Access vba代碼可以運行,但需要5個小時以上。 我需要為此做些事情,任何人都對如何加快速度有任何想法? 我曾經有一個想法是將其轉換為SQL Server上的存儲過程,但我不知道如何編寫,因此不勝感激。

謝謝

波波

VBA代碼:

' update the ID field in the import table 
Dim intCounter As Double 
Set MyRec = MyDB.OpenRecordset("tblMarsImport", dbOpenDynaset, dbSeeChanges) 

MyRec.MoveFirst 
intCounter = Format(Date, "yyyymmdd") & "000001" 

Do While Not MyRec.EOF 
   MyRec.Edit 
   MyRec!MarsID = CStr(intCounter) 
   MyRec.Update 
   MyRec.MoveNext 
   intCounter = intCounter + 1 
Loop 

MyRec.Close 
DECLARE @Result int
SELECT @Result = (SELECT SUM (row_count)
FROM sys.dm_db_partition_stats 
WHERE object_id=OBJECT_ID('tblMarsImport')    
AND (index_id=0 or index_id=1))
SELECT @Result

SET I=1
REPEAT
Update tblMarsImport set MarsID = Cast(Replace(Convert(varchar(10), Date, 120), '-', '') As int)
 + RIGHT('00000' + I, 6)

  SET I=I+1
UNTIL I>@Result

您可能需要稍微調整一下日期,但這應該可以使您真正接近。

編輯:再三考慮,您將需要在表中使用一個Identity列(類似於Access中的AutoNumber字段),以便可以通過使用Update命令中的WHERE子句來選擇要更新的記錄的ID。 否則,它將不斷更新同一條記錄。

您可能需要查看Row_number以便跟蹤當前正在循環通過的行。 這樣,您將無需在表中添加新列。 [行號文檔] [1] https://msdn.microsoft.com/zh-cn/library/ms186734.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM