小编典典

sql批量插入附加列

sql

一个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列?

谢谢!


阅读 205

收藏
2021-04-07

共1个答案

小编典典

您不能向使用BULK INSERT命令加载的数据集添加“任意列”。(如果您想处理它们的复杂性,SSIS包可以做到这一点。)

以下技巧有些复杂,但是我已经成功使用了几次:

  • 确定额外列的名称和要加载到其中的值(例如,MyDate和“ 1980年1月1日”)
  • 基于该表(ATLER TABLE MyTable添加约束DF_TempLoad缺省MyDate的默认值’Jan 1,1980’)在表上创建一个(临时)默认值[ 检查语法,它可能是关闭的 ]
  • 在表上创建一个(临时)视图,仅列出要批量插入的那些列
  • 对视图运行BULK INSERT;未包含在视图中的列将被分配默认值
  • 放下视图
  • 删除默认约束。
2021-04-07