批量数据导入建议


8

我们正在做一个项目,每天需要从Excel电子表格中导入数据。数据将从预定义模板以及我们的想法中导入,首先,我们将数据上传到临时表中并执行清理操作(删除不必要的信息,在父表中添加新行并获取其FK等)。

  • 我需要知道是否有任何工具或实用程序可以减少我们的工作量。
  • 从不同来源(主要是从Excel电子表格)插入大容量记录的最佳方法是什么?

我们将要创建的应用程序是基于Web的应用程序,其中用户对SQL Server的控制有限。用户将通过浏览器上传文件,其余操作将在服务器端完成。
kodvavi 2011年

Answers:


9

SSIS是进行此操作的方法。如果您以前从未构建过程序包,并且知道源文件(也称为电子表格)总是相同的,则可以使用SQL Server的导入/导出向导。在SSMS中,右键单击数据库,然后选择任务>导入(或导出)数据...

这将打开一个向导,该向导将引导您完成选择源/目标文件以及目标表的步骤(可以创建表(如果尚不存在的话))。您必须映射哪些列在哪里,但向导非常简单。完成后,它将要求您运行或保存程序包(或同时执行两个操作)。保存包。如果您选择将其保存到文件系统,则它将以.dtsx格式保存。您的另一个选择是将程序包保存在SQL Server本身中,然后将其保留在msdb系统数据库中。

保存软件包后,可以创建一个SQL Agent作业以定期运行该软件包(指定时间表),以便始终可以使用SSIS加载表。如果您想了解有关SSIS的更多信息,请在PragmaticWorks上查看我公司的免费网络研讨会(我们涵盖了整个BI堆栈)。


实际上,我们正在创建基于Web的应用程序,因此我们不允许用户直接访问数据库界面。我们的应用程序首先导入文件,然后通过我们的应用程序完成其余操作。
kodvavi 2011年

1
@kodvavi; 您可以通过.net代码调用SSIS包...
gbn

1
@kodvavi,我不确定您所说的意思是什么。Web应用程序通常不承担启动数据加载的任务,那为什么会那么重要?数据库和Web应用程序界面的ETL部分是两件事。
SQLChicken 2011年

我知道很多人都从网上启动SSIS软件包,但对我来说,这似乎不是一个好主意,因为excel来源可能出错。
Nick.McDermaid



0

我不会丢弃任何东西mr. gbn,Sankar Reddy,SQLChicken。但是我想说的是,在SQL中导入Excel工作表的简单方法是通过“ OPENROWSET” TSQL。

例如userTestDB数据库中导入Excel表格。假设我已经[user]TestDB数据库中创建了表。那么简单的openrowset TSQL将在下面这样提到

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

注意:我正在SQL Server 2012环境中编写此TSQL。对于每个SQL Server openrowset OLEDB提供程序将有所不同。请检查该OLEDB版本的SQL Server支持的链接服务器->提供程序。就我而言ACE.OLEDB.12.0。导入之前,请确保Allow inprocess已对该MICROSOFT.ACE.OLEDB.12.0提供程序进行了检查。应该这样检查 在此处输入图片说明

注意:-已在生产环境中测试。但是在您的情况下,无需在测试环境中进行测试。不要直接在生产环境中运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.