SQL BULK INSERT 与动态表创建
Posted
技术标签:
【中文标题】SQL BULK INSERT 与动态表创建【英文标题】:SQL BULK INSERT with on the fly table creation 【发布时间】:2012-01-06 13:17:45 【问题描述】:我想使用 BULK INSERT 将几百个原始数据表加载到 SQL Server 中。这些表格的格式会相似,但并不完全相同(它们来自没有严格版本控制的 Excel 表格)。
我想知道是否有一种方法可以根据要加载的文件中的标头动态生成 SQL Server 上所需的表,然后再进行 BULK INSERT。
【问题讨论】:
这需要在 TSQL 中完成,还是您愿意/能够编写一些 .NET 代码? 最好在 TSQL 中,但如果必须的话,我会设置一个小型 .net 应用程序 【参考方案1】:您可以使用 OPEN ROWSET 连接到这些 Excel 表。然后,执行以下操作:
SELECT *
FROM Excel
INTO NewTable
WHERE 0=1
这将传输架构。这是你想要的吗?
【讨论】:
是的,这行得通。是这样吗(在将 xls 文件转换为 csv 的中间步骤之后 - 这并不是真正必要的): SELECT * into NewTable FROM OPENROWSET ('MSDASQL', 'Driver=Microsoft Text Driver (*.txt; *. csv);DBQ=C:\FolderName\;', 'SELECT * from [filename.csv]'); 请注意,SQL 从电子表格派生的默认类型非常糟糕。此表处于错误状态。【参考方案2】:您可以制作一个excel脚本来生成用于创建表的sql语句,然后在批量插入数据之前执行文件。
【讨论】:
以上是关于SQL BULK INSERT 与动态表创建的主要内容,如果未能解决你的问题,请参考以下文章
SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中
BULK INSERT将CSV或TXT文件导入到SQL Server
SQLAlchemy bulk_insert_mappings():无法获取表“测试”的映射器
如何在 SQL Standard 上导出 SSIS 数据并在 SQL Express 上使用 Bulk Insert 导入?