[英]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.