【问题标题】:Import multiple Excel Files using BCP into a created Table in SQL使用 BCP 将多个 Excel 文件导入 SQL 中创建的表中
【发布时间】:2022-01-19 15:28:47
【问题描述】:

我使用以下 SQL 语法创建了一个名为“Buchungen”的表:

CREATE TABLE Buchungen 
    (
        Buchungsdatum Date,
        Produkttyp varchar(50) NULL,
        Workshopname varchar(50) NULL,
        Gutschein varchar(50) NOT NULL,
        IDkategorie int NOT NULL identity (1,1),
        Workshopdatum Date NULL,
        Gutscheineingeloest int NOT NULL,
        AnzahlTickets int NOT NULL,
        Artikelpreis decimal (18,2) NULL,
        Einzelpreis decimal (18,2) NULL,
        GesamtZahlungspreis decimal (18,2) NULL,
        GesamtRechnungspreis decimal (18,2) NULL,
        Kundenname varchar(50) NOT NULL,
        EmailAdresse varchar(50) NULL,
        Bezahlart varchar(20) NOT NULL,
        BestellGebuehr decimal (18,2) NULL,
        UeberweisungsID varchar(50) NOT NULL,
        BuchungsID varchar(50) NOT NULL,
        BestellID int NOT NULL,
        AnbieterID int NOT NULL,
        Anbieter varchar(50) NULL,
        Workshopmonat int NULL
    )

任务:

在“Buchungen”表中导入多个 Excel 文件,该表与我在 SQL 中创建的表具有相同的列结构。 是否可以使用 cmd 中的 BCP 命令将多个并通过结构相同的 Excel 文件导入此表。 我必须自动化它,以便导入在一天中的给定时间自动运行。这部分我在任务计划程序中找到了一个任务,它使用我的 bcp 代码运行一个 .bat 文件。

这是我为 cmd 的 BCP 工具编写的代码行,仅用于 1 个 txt 文件:

bcp ExcelImportTraining00.dbo.Buchungen in "C:\Users\Desktop\01 Dell Latitude 5400\01 Main Folder\00 Excel to SQL\Demo\Products.txt" -SServerName -c -F2 -t"|" -T

我对 SQL 和 SQL Server 还很陌生,因此非常感谢您的帮助。

问题: 是否可以在多个 Excel 文件上使用 bcp 工具并将它们全部导入到 SQL 中先前创建的匹配表中?

我还尝试将 bcp 集成到一个循环中并遍历我文件夹中的所有文件,但无法将数据导入我的数据库中的表中。

这是我写的循环:

$source = ""C:\Users\Desktop\01 Dell Latitude 5400\01 Main Folder\00 Excel to SQL\Demo\"  

$files=Get-ChildItem $source  -Recurse -Filter *.csv |  

Foreach {           

bcp TMKPIReporting.dbo.Buchungen in $files=Get-ChildItem $source  -Recurse -Filter *.csv  -SServerName -T -q -c -F2 -t 

}

它被执行,但我在 SQL Server 中的表是空的。

【问题讨论】:

  • 您需要遍历文件。假设您使用 PowerShell 调用 bcp,您将能够快速找到一些有关如何通过搜索循环遍历目录中所有文件的资源。
  • 感谢您的提示,但我仍在苦苦挣扎。我想出了以下循环:$source = ""C:\Users\Desktop\01 Dell Latitude 5400\01 Main Folder\00 Excel to SQL\Demo\" $files=Get-ChildItem $source -Recurse -Filter *.csv | Foreach { bcp TMKPIReporting.dbo.Buchungen in $files=Get-ChildItem $source -Recurse -Filter *.csv -SServerName -T -q -c -F2 -t } 它被执行但我在 SQL Server 中的表是空的。
  • Edit 您的问题包括您尝试使用的 PowerShell 代码。您可以通过缺少格式来查看评论,而不是这样做的地方。
  • @AlwaysLearning 好的。谢谢你告诉我。

标签: sql-server excel powershell bcp


【解决方案1】:

您可以通过几种不同的方式做到这一点。

select * 
into SQLServerTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=D:\testing.xls;HDR=YES', 
    'SELECT * FROM [Sheet1$]')

Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=D:\testing.xls;HDR=YES', 
    'SELECT * FROM [SheetName$]')

如果您的表格结构与 Excel 文件中的所有标题匹配,您可以考虑将每个 Excel 文件保存为单独的 CSV 文件,然后使用循环将所有 CSV 文件批量插入您的表格中。最后,您可以使用 VBA 或 CSV 文件将所有 excel 文件合并到一个 Excel 文件中,然后将其导入 SQL Server。

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2011-11-26
    • 2016-12-06
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2015-03-08
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多