利用 Office 內建的 VBA 與 ADO 物件,配合 MyODBC 驅動,可在 Excel/Access 中直接編寫遷移腳本,無需額外工具,靈活可控。本文提供完整可執行代碼。
mysql1)、目標資料庫、帳密。Microsoft ActiveX Data Objects x.x Library。Sub MigrateSQLServerToMySQL()
Dim sConnect As String, sSql As String
Dim cnMSSQL As New ADODB.Connection
Dim cnMySQL As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cm As New ADODB.Command
' 1. 連接 MySQL (via MyODBC DSN)
sConnect = "DSN=mysql1"
cnMySQL.Open sConnect
' 2. 連接 SQL Server 7.0 (OLE DB)
sConnect = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=123456;Initial Catalog=softdown;Data Source=ntserver"
cnMSSQL.Open sConnect
' 3. 讀取來源資料
sSql = "SELECT * FROM softinfo ORDER BY softnum"
rs.Open sSql, cnMSSQL, adOpenStatic, adLockReadOnly
' 4. 清空目標表(可選)
cm.ActiveConnection = cnMySQL
cm.CommandType = adCmdText
cm.CommandText = "DELETE FROM softinfo"
cm.Execute
' 5. 逐筆寫入 MySQL
Do While Not rs.EOF
sSql = "INSERT INTO softinfo VALUES (" & _
Trim(rs(0).Value) & ", '" & _
Trim(rs(1).Value) & "', '" & _
Trim(rs(2).Value) & "', '" & _
Trim(rs(3).Value) & "', '" & _
Trim(rs(4).Value) & "', '" & _
Trim(rs(5).Value) & "', " & _
Trim(rs(6).Value) & ", " & _
Trim(rs(7).Value) & ")"
cm.CommandText = sSql
cm.Execute
rs.MoveNext
Loop
' 6. 釋放資源
rs.Close: Set rs = Nothing
cnMySQL.Close: Set cnMySQL = Nothing
cnMSSQL.Close: Set cnMSSQL = Nothing
End Sub
cm.Parameters.Append 避免 SQL 注入與特殊字元轉義問題。LOAD DATA INFILE 或關閉索引後批次 INSERT 再重建索引。image/text → MySQL BLOB/TEXT,datetime 格式通常相容。同樣原理可用於: