海量数据插入SQL Server?

时间:2011-12-01 19:09:32

标签: c++ sql sql-server excel vba

我在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 ++或某些组合(因为这些是我知道且有权访问的语言)。关于如何最好地解决这个问题的任何想法?

4 个答案:

答案 0 :(得分:2)

您可以使用SSIS或DTS包导入它们。以下是一些可以帮助您前进的参考资料。

Creating a DTS Package - pre 2005

Creating a SSIS Package - 2005 forward

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您可以使用以下脚本

SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', '数据源= C:\ test \ xltest.xls;扩展属性= 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 $]')