【问题标题】:SQL - Bulk Insert and Data TypesSQL - 批量插入和数据类型
【发布时间】:2012-10-24 22:30:04
【问题描述】:

今天我有一个固定宽度文件的批量插入,如下所示:

BULK INSERT #TBF8DPR501
FROM 'C:\File.txt' WITH (
        FORMATFILE = 'C:\File.txt.xml'
        ,ROWTERMINATOR = '\n'
        )

格式化文件只是设置每个字段的宽度,批量插入到临时表后,我创建了一个INSERT INTO X SELECT FROM temp来转换一些批量无法转换的列。

我的问题是,是否有可能使批量插入能够转换以下值:

  • 日期格式为dd.MM.yyyy OR ddMMyyyy
  • 像这样的十进制值0000000000010022(它是100.22

不需要批量插入临时表来转换值?

【问题讨论】:

    标签: sql-server bulkinsert


    【解决方案1】:

    不,它不是:BULK INSERT 只是尽可能快地复制数据,它不会以任何方式转换数据。您当前使用临时表的解决方案是数据仓库和报告方案中非常常用的解决方案,因此如果它按您希望的方式工作,我会继续使用它。

    如果您确实想在加载期间进行转换,则可以使用ETL 工具,例如SSIS。但是您当前的方法没有任何问题,SSIS 将是一个非常“重”的替代方案。

    【讨论】:

    • 我唯一的“问题”是现在需要 4 个小时才能运行(txt 与 30gb),我试图减少这个值只保留在 sql server 中,没有其他可以做的sql?谢谢
    • 如果您的真正问题是性能,为什么还要询问格式化数据?您是否阅读并关注了关于优化批量操作的documentation
    • 是的,我已经尝试了大多数优化(批量记录/锁定/等),但速度不会提高.. 到目前为止,我设法做的是使用带有批量选项的 openrowset..这样我就设法删除了临时表并在读取时插入数据。我设法将时间缩短到 3 小时.. 不知道我还能做些什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多