海量数据插入到SQL Server?

我有一个Excel工作簿中的8个工作表,我想导入SQL Server数据库中的单独的表。

我希望将8个工作表中的每一个导入到一个单独的表中,理想情况下,表名与工作表选项卡名称一致,但最初,我只想将数据导入到表中,所以任意表名都适用于太。

每个工作表(和扩展表)中的数据格式是相同的(并且将是相同的),所以我正在考虑某种循环可以用来做到这一点。

数据看起来像这样:

Universe Date Symbol Shares MktValue Currency SMALLCAP 6/30/2011 000360206 27763 606361.92 USD SMALLCAP 6/30/2011 000361105 99643 2699407.52 USD SMALLCAP 6/30/2011 00081T108 103305 810926.73 USD SMALLCAP 6/30/2011 000957100 57374 1339094.76 USD 

在SQL中的表格格式将会/应该与以下一致:

 CREATE TABLE dbo.[market1] ( [Universe_ID] char(20), [AsOfDate] smalldatetime, [Symbol] nvarchar(20), [Shares] decimal(20,0), [MktValue] decimal(20,2), [Currency] char(3) ) 

我打开这样做使用SQL / VBA / C ++或一些组合(因为这些是我知道和有权访问的语言)。 任何想法如何最好地去做这件事?

您可以使用SSIS或DTS包导入它们。 这里有几个引用让你去。

创build一个DTS包 – 2005年以前

创build一个SSIS包 – 2005转发

对于具有xlsx扩展名的Excel文件(2007或2010),我已将其重命名为.zip,并将其内容提取到一个目录中,并使用SQL XML Bulk Load导入工作表和引用表。 当我拥有SQL服务器中的所有数据时,我使用基本的SQL查询将所需的数据提取/转换成指定的工作表。 – 这保留了SQL中的“消解”逻辑,并使用最less的C#开发的外部VB脚本。

链接到SQL大容量加载的XML数据: http : //support.microsoft.com/kb/316005

在SQL Management Studio中,右键单击数据库,然后单击任务,然后导入数据。 这将带你通过一些屏幕,并创build一个SSIS包来导入文件。 在这个过程中的某个时刻,它会问你是否要保存包(我也会运行它几次,以确保它以你想要的方式导入你的数据)。 保存它,然后您可以通过SQL Server代理程序将程序包计划为作业运行。 (作业types将是Sql Server Integration Services)。

您可以使用以下脚本

SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source = C:\ test \ xltest.xls; Extended Properties = Excel 8.0')… [Customers $]

SELECT * INTO XLImport4 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0; Database = C:\ test \ xltest.xls',[Customers $])

SELECT * INTO XLImport5 FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0; Database = C:\ test \ xltest.xls','SELECT * FROM [Customers $]')

或者可以使用以下

SELECT * INTO XLImport2 FROM OPENQUERY(EXCELLINK,'SELECT * FROM [Customers $]')