将数据从 Excel 导出到 SQL 服务器

Export data from Excel to SQL Server

我正在尝试使用多个表的 bcp 命令将数据从 Excel 推送到 SQL 服务器。目前我已经设置了我的代码,例如它创建了需要推送的数据文本文件(在循环中),然后 运行 下面提到的 bcp 命令

bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P password -b 10000

但是我想取消循环,并希望 运行 单个 bcp 命令将多个表的名称作为第一个参数,将不同的文本文件作为第二个参数。我试着在网上找到这个问题的解决方案,但一无所获。

任何帮助将不胜感激。

只是一些背景知识:我想取消循环和 运行 单个命令的原因是,我观察到我的代码有奇怪的行为,当我单步执行我的代码时,它是能够将所有数据推送到 SQL 服务器,但是当我通过单击分配了宏的按钮立即 运行 整个过程时,代码仍然 运行s 但不t 将任何数据推送到 SQL 服务器。

为了解决这个问题,我尝试将 doevents 放在 bcp 命令之后,但一切都是徒劳的,然后我在 bcp 命令之后设置了等待 5 秒,它似乎可以工作,但我觉得设置等待有点冒险,我永远不会确定等待时间应该是多少。

单个BCP命令只能将数据推送到单个table。无法将多个 table 名称传递给单个 BCP 命令。

用一个好的老式循环来处理任务没有错。

Sub Button1_Click()

    Dim conn As New ADODB.Connection
    Dim iRowNo As Integer
    Dim sCustomerId, sFirstName, sLastName As String

    With Sheets("Sheet1")

        'Open a connection to SQL Server
        conn.Open "Provider=SQLOLEDB;Data Source=ASUSBOOK\SQL2012;Initial Catalog=ExcelDemo;Integrated Security=SSPI;"

        'Skip the header row
        iRowNo = 2

        'Loop until empty cell in CustomerId
        Do Until .Cells(iRowNo, 1) = ""
            sCustomerId = .Cells(iRowNo, 1)
            sFirstName = .Cells(iRowNo, 2)
            sLastName = .Cells(iRowNo, 3)

            'Generate and execute sql statement to import the excel rows to SQL Server table
            conn.Execute "insert into dbo.Customers (CustomerId, FirstName, LastName) values ('" & sCustomerId & "', '" & sFirstName & "', '" & sLastName & "')"

            iRowNo = iRowNo + 1
        Loop

        MsgBox "Customers imported."

        conn.Close
        Set conn = Nothing

    End With

End Sub

另外,看看这个 link。

https://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm

如果循环方案对您来说太慢,请考虑将数据集保存为 CSV 文件并执行批量插入。

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

https://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/