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文件中的数据批量插入表中

SQL Server 动态生成数据库所有表Insert语句

BULK INSERT将CSV或TXT文件导入到SQL Server

SQLAlchemy bulk_insert_mappings():无法获取表“测试”的映射器

如何在 SQL Standard 上导出 SSIS 数据并在 SQL Express 上使用 Bulk Insert 导入?

使用Hive SQL插入动态分区的Parquet表OOM异常分析