You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决CSV导入MSSQL时的string[DT_STR]错误及日期转换问题

解决SSMS导入CSV时的DT_STR及日期列转换失败问题

核心排查与解决步骤

  • 检查CSV文件的实际内容
    直接用记事本/VS Code打开CSV文件,重点核查create_dt列:

    • 确认所有行的日期格式统一(比如是否存在yyyy-MM-dd和MM/dd/yyyy混合的情况)
    • 排查是否有空值、特殊字符(如空格、不可见字符)或非日期内容(如N/A、空字符串)
    • 验证列分隔符是否正确,是否有字段因包含分隔符未用引号包裹,导致列错位(比如某字段含逗号,使得create_dt被错误解析到其他列)
  • 调整Flat File连接管理器配置

    1. 在导入向导的「Flat File源」步骤,点击「高级」按钮
    2. 找到create_dt列,将默认的string[DT_STR]数据类型改为date[DT_DATE]或datetime[DT_DBTIMESTAMP],同时确认列宽足够容纳日期字符串
    3. 若日期格式非标准,切换到「常规」选项卡,选择匹配的区域设置(如中文简体),并勾选「保留 null 值」
  • 手动配置SSIS转换组件
    若向导自动转换失效,建议手动搭建SSIS包:

    1. 添加「数据转换」组件,连接Flat File源与目标表
    2. 选择create_dt列,设置转换类型为DT_DBTIMESTAMP,并指定对应日期格式(如yyyy-MM-dd HH:mm:ss)
    3. 若存在格式不统一的日期,添加「派生列」组件处理异常值:
      ISDATE(create_dt) ? (DT_DBTIMESTAMP)create_dt : NULL(DT_DBTIMESTAMP)
      
  • 验证目标表列定义
    确认MSSQL中employee_account表的create_dt列类型:

    • 若目标列是DATE类型,CSV日期必须是无时间部分的yyyy-MM-dd格式
    • 若目标列是DATETIME/DATETIME2,需确保CSV日期包含合法时间部分,或支持隐式转换
  • 改用BULK INSERT命令导入
    若向导始终报错,直接用T-SQL命令更灵活控制格式:

    BULK INSERT employee_account
    FROM 'C:\path\to\your\employee_account.csv'
    WITH (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '\n',
        FIRSTROW = 2, -- 若CSV包含表头则跳过第一行
        DATEFORMAT = 'ymd', -- 匹配CSV的日期格式,如dmy/mdy
        KEEPNULLS
    )
    

常见避坑点

  • 编码问题:若CSV是UTF-8带BOM编码,需在Flat File连接管理器中设置对应编码,避免乱码导致转换失败
  • 列数匹配:确认CSV表头列数与目标表列数完全一致,防止列错位引发错误

内容的提问来源于stack exchange,提问作者Bami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:55:07