Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Sql server 如何使用VBA加速Access和SQL Server之间的表传输?_Sql Server_Excel_Vba_Tsql_Ms Access - Fatal编程技术网

Sql server 如何使用VBA加速Access和SQL Server之间的表传输?

Sql server 如何使用VBA加速Access和SQL Server之间的表传输?,sql-server,excel,vba,tsql,ms-access,Sql Server,Excel,Vba,Tsql,Ms Access,我试图以编程方式将表从access移动到SQL Server。 我在系统权限方面有一些限制,即:我不能使用OPENDATASOURCE或OPENROWSET 我想要实现的是将一些表从Access传输到SQL Server,然后通过vba(excel)/python和T-SQL处理这些表 问题在于移动工作台所需的时间。 我目前的程序是: 我使用vba宏,从excel导入数据,并在access中进行相同的转换,然后导入SQL Server 销毁服务器中的表:“删除表” 使用DoCmd.Transfe

我试图以编程方式将表从access移动到SQL Server。 我在系统权限方面有一些限制,即:我不能使用OPENDATASOURCE或OPENROWSET

我想要实现的是将一些表从Access传输到SQL Server,然后通过vba(excel)/python和T-SQL处理这些表

问题在于移动工作台所需的时间。 我目前的程序是:

  • 我使用vba宏,从excel导入数据,并在access中进行相同的转换,然后导入SQL Server
  • 销毁服务器中的表:“删除表”
  • 使用DoCmd.TransferDatabase重新导入表
  • 我注意到,该操作似乎是基于一批行而不是直接完成的。每1000行需要1分半钟。同样的访问操作也需要几秒钟

    我知道SQL Server使用10行批量导入是一种特殊的方式,可能是为了更好地访问数据:

    但在上面的过程中,我只希望尽快将表从access复制到SQL,这样我就可以避免跨平台链接,并且只在SQL Server上执行操作


    实现这一目标的更快方法是什么?

    为什么像OPENDATASOURCE或OPENROWSET这样的函数会被阻止?你在银行工作吗

    我不能肯定哪种解决方案是最快的,但是你可能想考虑将所有的访问表导出为单独的CSV文件(或者Excel文件),然后运行一个小脚本将每个文件加载到SQLServer中。 下面是一些VBA代码,它将单独的表保存为单独的文件

    Dim obj As AccessObject, dbs As Object
    Set dbs = Application.CurrentData
    For Each obj In dbs.AllTables
    If Left(obj.Name, 4) <> "MSys" Then
    DoCmd.TransferText acExportDelim, , obj.Name, obj.Name & ".csv", True
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, obj.Name, obj.Name & ".xls", True
    End If
    Next obj
    

    也可以考虑这些选项中的一个。


    每次10行用于将数据从Sql Server提取到Access中,而不是插入。的可能重复(问题是关于Oracle的,答案是针对Sql Server的。)--另请参见为什么使用Access表?无论您对access表做什么,都可以使用链接到access的第二个SQL表来完成,前提是不可能只使用一个表来完成所需的操作。您好,因为我无法将excel文件导入SQL Server,因为OPENDATASOURCE或OPENROWSET等函数被阻止。那么对于相同的简单操作,访问速度奇快。
    Create TestTable
    
    USE TestData
    GO
    CREATE TABLE CSVTest
    (ID INT,
    FirstName VARCHAR(40),
    LastName VARCHAR(40),
    BirthDate SMALLDATETIME)
    GO
    
    BULK
    INSERT CSVTest
    FROM 'c:\csvtest.txt'
    WITH
    (
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
    )
    GO
    --Check the content of the table.
    SELECT *
    FROM CSVTest
    GO
    --Drop the table to clean up database.
    DROP TABLE CSVTest
    GO