[英]Export new data only from Excel to SQL
The following Excel VBA code exports data from a spreadsheet to SQL: 以下Excel VBA代码将数据从电子表格导出到SQL:
Sub SQLIM()
' Send data to SQL Server
' This code loads data from an Excel Worksheet to an SQL Server Table
' Data should start in column A and should be in the same order as the server table
' Autonumber fields should NOT be included'
' FOR THIS CODE TO WORK
' In VBE you need to go Tools References and check Microsoft Active X Data Objects 2.x library
Dim Cn As ADODB.Connection
Dim ServerName As String
Dim DatabaseName As String
Dim TableName As String
Dim UserID As String
Dim Password As String
Dim rs As ADODB.Recordset
Dim RowCounter As Long
Dim ColCounter As Integer
Dim NoOfFields As Integer
Dim StartRow As Long
Dim EndRow As Long
Dim shtSheetToWork As Worksheet
Set shtSheetToWork = ActiveWorkbook.Worksheets("Sheet1")
Set rs = New ADODB.Recordset
ServerName = "WIN764X\sqlexpress" ' Enter your server name here
DatabaseName = "two28it" ' Enter your database name here
TableName = "COS" ' Enter your Table name here
UserID = "" ' Enter your user ID here
' (Leave ID and Password blank if using windows Authentification")
Password = "" ' Enter your password here
NoOfFields = 7 ' Enter number of fields to update (eg. columns in your worksheet)
StartRow = 2 ' Enter row in sheet to start reading records
EndRow = shtSheetToWork.Cells(Rows.Count, 1).End(xlUp).Row ' Enter row of last record in sheet
' CHANGES
' Dim shtSheetToWork As Worksheet
' Set shtSheetToWork = ActiveWorkbook.Worksheets("Sheet1")
'********
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & ServerName & ";Database=" & DatabaseName & _
";Uid=" & UserID & ";Pwd=" & Password & ";"
rs.Open TableName, Cn, adOpenKeyset, adLockOptimistic
For RowCounter = StartRow To EndRow
rs.AddNew
For ColCounter = 1 To NoOfFields
rs(ColCounter - 1) = shtSheetToWork.Cells(RowCounter, ColCounter)
Next ColCounter
Next RowCounter
rs.UpdateBatch
' Tidy up
rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing
End Sub
I want to modify the code to: 我想将代码修改为:
This is the wrong way to do this task. 这是执行此任务的错误方法。 Do this from the SQL server instead.
而是从SQL Server执行此操作。 Look up the merge command if you are using SQL Server 2008.
如果使用的是SQL Server 2008,请查找merge命令。
Also consider using SSIS to do this task, it is a better choice than doing it from VBA. 还可以考虑使用SSIS来执行此任务,这比从VBA中执行此操作更好。 OR look up the OPenrowset command in t-SQL and do it that way.
或者在t-SQL中查找OPenrowset命令,然后执行此操作。
我建议将数据从Excel上传到SQL中的登台表,然后(也通过VBA)调用一个SQL存储过程,该存储过程包含适合您将登台表中的数据合并到最终目标表中的逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.