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

将文本文件导入SSMS时如何避免Datetime字段被拆分为两列

问题根因

该问题基本都是平面文件的分隔符配置错误导致:如果你的datetime字段是「日期 时间」的空格分隔格式,而你在导入向导中误将空格设为了列分隔符,或者没有配置正确的文本限定符,就会导致单个datetime字段被拆分为日期、时间两列。

可行的非手动解决方案

方法1:直接修改SSMS导入向导配置(最便捷)

  • 打开导入向导走到「选择平面文件源」步骤,在左侧导航栏进入「列」选项卡
  • 先确认行分隔符匹配文件实际的换行规则(通常为{CR}{LF}),再把列分隔符修改为文件实际的字段分隔规则(比如逗号、制表符,不要选择空格作为分隔符)
  • 切换到「高级」选项卡,找到被误拆分出来的两个临时列,删掉多余的列,将保留的对应列的数据类型设置为DT_DBTIMESTAMP,同时调整该列的列宽到足够容纳完整的datetime字符串
  • 后续步骤正常执行即可,100万行数据导入不会有性能问题

方法2:保存为SSIS包处理(适合重复导入同格式文件场景)

  • 在导入向导的最后一步,选择「保存SSIS包」选项,将本次的配置保存为dtsx格式包文件
  • 打开SSIS包编辑界面,调整平面文件源组件的分隔符规则,如果你的datetime字段是被双引号/单引号包裹的,直接配置对应文本限定符即可自动识别为单个字段
  • 配置完成后直接执行包即可,也可以后续定时/批量调用导入同格式的文件

方法3:用BULK INSERT命令导入(适合熟悉SQL操作的场景)

直接在SSMS查询窗口执行批量插入命令,显式指定分隔符和字段规则,示例代码如下:

BULK INSERT 你的目标表名
FROM 'C:\你的文件存储路径\源文件.txt'
WITH (
    FIELDTERMINATOR = ',', -- 替换为你实际的列分隔符
    ROWTERMINATOR = '\n', -- 替换为你实际的行分隔符
    CODEPAGE = '65001', -- UTF-8编码文件填65001,GBK编码填936
    FIRSTROW = 2, -- 首行是表头则设为2,无表头则设为1
    TABLOCK
)

如果datetime格式和SQL Server默认格式不匹配,可以先将该字段导入为VARCHAR(50)类型,再执行转换语句即可,示例如下:

-- 格式为yyyy-MM-dd HH:mm:ss时用格式码120,其他格式替换为对应格式码即可
UPDATE 你的目标表名 
SET 目标datetime列 = CONVERT(DATETIME, 临时存储的varchar列, 120);

-- 转换完成后修改字段类型
ALTER TABLE 你的目标表名 
ALTER COLUMN 目标datetime列 DATETIME;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:15:02