csv 文件包含 8 列(col1、col2、...、col8),文件名也包含必须插入表中的日期。
如果表中的列数和 csv 文件中的列数相等,则以下查询将文件中的所有记录导入到表中:
query += "BULK INSERT real_data FROM '" + path + "' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')";
到目前为止,我还没有找到修改查询的解决方案,以便新记录可以包含从文件名中提取的日期。无论如何,我创建了一个函数来提取日期:
DateTime eventTime = extractDate(path);
并希望将 eventTime 插入到从文件导入的每条记录的第 9 列中。
有谁知道如何修改/创建查询语句以从文件导入 8 列并将日期添加为每个导入记录的第 9 列?
谢谢你!
您无法将“任意列”添加到使用 BULK INSERT 命令加载的数据集中。 (如果您想处理它们的复杂性,SSIS 包可以做到这一点。)
下面的技巧有点复杂,但我已经成功使用过几次了:
- 确定额外列的名称以及要加载到其中的值(例如,MyDate 和“Jan 1, 1980”)
- 基于此在表上创建(临时)默认值(ATLER TABLE MyTable 添加约束 DF_TempLoad default 'Jan 1, 1980' for MyDate [检查语法,可能是关闭的]
- 在表上创建一个(临时)视图,仅列出要批量插入的列
- 针对视图运行 BULK INSERT;视图中未包含的列将被分配默认值
- 放下视图
- 删除默认约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)