Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅将新数据从Excel导出到SQL_Sql_Sql Server_Excel_Vba - Fatal编程技术网

仅将新数据从Excel导出到SQL

仅将新数据从Excel导出到SQL,sql,sql-server,excel,vba,Sql,Sql Server,Excel,Vba,以下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 '

以下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
我想将代码修改为:

  • 检查SQL表中是否已存在列A中的数据
  • 如果数据存在,则仅更新而不是作为新角色导入
  • 如果数据不存在,则将其作为新角色导入

  • 这是做这项工作的错误方法。改为从SQL server执行此操作。如果您使用的是SQL Server 2008,请查找merge命令


    也考虑使用SSIS来完成这项任务,这是比从VBA做的更好的选择。或者在t-SQL中查找OPenrowset命令并以这种方式执行。

    这是执行此任务的错误方式。改为从SQL server执行此操作。如果您使用的是SQL Server 2008,请查找merge命令


    也考虑使用SSIS来完成这项任务,这是比从VBA做的更好的选择。或者在t-SQL中查找OPenrowset命令并以这种方式执行。

    我建议将数据从Excel上载到SQL中的暂存表,然后调用(也可以通过VBA)一个SQL存储过程,包含适合您需要的逻辑,用于将暂存表中的数据合并到最终目标表中。

    我建议将Excel中的数据上载到SQL中的暂存表,然后调用(也通过VBA)一个SQL存储过程,它包含适合您需要的逻辑,用于将数据从暂存表合并到最终目标表。

    您可以编辑日志以在一个块中获取所有代码吗?没有必要,但它使阅读更容易。你能编辑你的文章,使代码全部在一个块中吗?没有必要,但它使阅读更容易。有很多方法可以完成此任务,但我同意直接从SQL Server合并将是最佳方法。有很多方法可以完成此任务,但我同意直接从SQL Server合并将是最佳方法。