C++ 是否将海量数据插入SQL Server?
Excel工作簿中有8个工作表,我想将它们导入SQL Server数据库中的单独表中 我希望将8个工作表中的每一个都导入到一个单独的表中,理想情况下,表名与工作表选项卡名一致,但最初,我只想将数据导入表中,因此任意的表名暂时也可以使用 扩展后的每个工作表和表格中的数据格式都是相同的,因此我认为可以使用某种循环来实现这一点 数据如下所示:C++ 是否将海量数据插入SQL Server?,c++,sql,sql-server,excel,vba,C++,Sql,Sql Server,Excel,Vba,Excel工作簿中有8个工作表,我想将它们导入SQL Server数据库中的单独表中 我希望将8个工作表中的每一个都导入到一个单独的表中,理想情况下,表名与工作表选项卡名一致,但最初,我只想将数据导入表中,因此任意的表名暂时也可以使用 扩展后的每个工作表和表格中的数据格式都是相同的,因此我认为可以使用某种循环来实现这一点 数据如下所示: Universe Date Symbol Shares MktValue Currency SMALLCAP 6/3
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++或其他组合语言来实现这一点,因为我知道并可以使用这些语言。对于扩展名为xlsx的Excel文件2007或2010,我已将其重命名为.zip,并将其内容提取到目录中,并使用SQL XML批量加载导入工作表和参考表。当我拥有SQL server中的所有数据时,我使用基本SQL查询将所需数据提取/转换为指定的工作表。-这将在SQL中保留消解逻辑,并使用C开发的最小外部VB脚本
链接到SQL批量加载XML数据:您可以使用SSI或DTS包导入它们。这里有几份推荐信可以帮助你
在SQL Management Studio中,右键单击数据库,然后单击任务,然后导入数据。这将引导您浏览一些屏幕,并创建一个SSIS包来导入文件。在这个过程中的某个时候,它会问你是否要保存这个包,我也会运行它几次,以确保它以你想要的方式导入你的数据。保存它,然后您可以通过SQL Server代理计划将包作为作业运行。作业类型将是Sql Server Integration Services。您可以使用以下脚本 从OPENDATASOURCE“Microsoft.Jet.OLEDB.4.0”中选择*进入XLImport3, '数据源=C:\test\xltest.xls;扩展属性=Excel 8.0'…[Customers$] 从OPENROWSET“Microsoft.Jet.OLEDB.4.0”中选择*进入XLImport4, "excel8.0,;数据库=C:\test\xltest.xls',[Customers$] 从OPENROWSET'Microsoft.Jet.OLEDB.4.0'中选择*进入XLImport5, "excel8.0,;Database=C:\test\xltest.xls','SELECT*FROM[Customers$]' 或者可以使用下面的 从OPENQUERYEXCELLINK中选择*进入XLImport2,
“从[Customers$]中选择*”这是您希望按计划运行的作业还是一次性导入的作业?您可以使用DTS或SSI吗?请检查Sql Server的批量导入功能。您可以将excel另存为csv,然后导入这些文件。@Robert-假设一次。通过Windows调度器将其设置为按计划运行是次要的。什么是DTS和SSI?@SebastianPiu-我计划使用批量插入作为这项工作的一部分。它是否允许导入多个工作表?@Chris-我想我应该问问您是否有Enterprise manager和security直接加载数据库?或者你只是有一个开发人员用户名和密码,所以你必须使用一个应用程序来完成吗?谢谢你的建议。我知道导入向导,但我试图避免这样做8次,每个工作表一次。没有好的编程方法来实现这一点?当然可以编程实现,但我认为这会更容易。创建导入脚本并修改每个工作表的数据源。这听起来比编写程序来读取工作表、创建表格然后输入数据更容易。另一种选择是将Excel直接连接到SQL并以这种方式加载数据;虽然包的开发要比DTS好得多,但部署和维护源代码控制是一件痛苦的事情。此外,错误处理相当糟糕,您需要一个DBA来支持它。@Juliusz您正确的SSI和DTS包可能会很麻烦,但对于导入数据,我总是发现它们是最简单的。就像我说的,你可以创建一个程序来完成这项工作,但是对于一个一次性的工作来说,它似乎比简单的导入要复杂得多。