使用SSMS导入TXT数据到SQL Server时所有字段存入单列的问题
问题根因
你遇到的导入异常是因为SSMS导入向导默认仅预设了单字符分隔符选项,你使用的~*属于双字符组合分隔符,未正确配置的情况下系统无法识别字段拆分规则,会将整行内容存入同一列,同时保留原始分隔符字符。
解决方案
可按优先顺序选择以下任意一种方案处理:
- 方案1:预处理源文件(操作最简单)
打开TXT文件,全局替换所有~*为源数据中不存在的单字符分隔符,例如竖线|、制表符等,替换完成后重新打开SSMS导入向导,选择对应单字符作为分隔符即可正常拆分字段。 - 方案2:导入向导自定义多字符分隔符(无需修改源文件)
- 打开SSMS导入向导,数据源选择「平面文件源」,选中目标TXT文件
- 切换到「列」配置页,直接在「列分隔符」输入框中手动输入
~*(不要选择下拉框内的预设选项) - 点击「刷新」按钮,若预览区已正常拆分多列,继续完成后续导入流程即可
注:部分旧版本SSMS不支持手动输入多字符分隔符,可更换为方案3
- 方案3:用BULK INSERT命令导入(灵活性最高)
直接在SSMS查询窗口执行SQL命令导入,原生支持多字符分隔符配置,示例代码如下:
若你的文件每行末尾也带有BULK INSERT 你的目标表名 FROM 'C:\你的文件存储路径\数据文件.txt' WITH ( FIELDTERMINATOR = '~*', -- 指定字段分隔符为~* ROWTERMINATOR = '\r\n', -- Windows系统生成的TXT行分隔符为\r\n,Linux/Mac生成的为\n CODEPAGE = '65001', -- 文件编码为UTF-8填65001,GBK编码填936 FIRSTROW = 1 -- 若文件第一行是表头则填2,无表头填1 );~*,导入后会生成最后一个空列,可在导入完成后手动删除该空列即可。
编码异常排查
如果拆分字段后出现乱码,可先通过记事本打开源文件,选择「另存为」查看底部的编码类型,回到导入向导的「常规」配置页,将「代码页」选项和文件实际编码匹配即可解决乱码问题。
内容的提问来源于stack exchange,提问作者sandersql
相关产品推荐
相关产品推荐

