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

SSMS导入Excel/CSV至Azure SQL DB时多值列配置问题咨询

SSMS导入Azure SQL DB多值人名列方案

分隔符选型

针对Albert Einstein、Joe DiMaggio这类外文人名的多值场景,直接选用竖线(|)作为多值分隔符,其余常用分隔符全部不适用,原因如下:

  • 空格:人名本身名和姓之间就带空格,用空格会把单个人名拆成两个独立值,完全无法使用
  • 逗号:带后缀、称谓的人名常包含逗号(比如Robert Downey, Jr.),会触发误拆分
  • 分号:容易和CSV文件默认的字段分隔符冲突,且部分特殊人名注释场景会用到分号
  • 换行符:会破坏CSV/Excel的行结构,导入时大概率出现断行、数据错位问题
    竖线不会出现在常规人名书写中,和SSMS、CSV的所有默认分隔规则无冲突,拆分准确率可以达到100%,格式化后的多值列示例:Albert Einstein|Joe DiMaggio|Marie Curie

SSMS导入向导配置规则

首先明确:SSMS导入向导没有原生的「多值列标记+自动拆分」功能,根据你的存储需求分两种场景配置:

场景1:多值内容直接存入单字段(后续按需拆分)

这是最简便的方案,操作步骤:

  • 导入流程走到「选择源表和源视图」步骤时,点击对应表的「编辑映射」选项
  • 找到存储多值人名的目标字段,将数据类型设置为足够长度的nvarchar类型(建议直接用nvarchar(MAX),避免长内容截断)
  • 若源文件为CSV格式,在平面文件数据源配置页,将文本限定符设置为双引号("),保证被双引号包裹的字段内的竖线不会被识别为全局字段分隔符
  • 完成配置后正常执行导入即可,整段多值内容会作为完整字符串写入目标字段。后续需要拆分取值时,直接调用Azure SQL DB内置的STRING_SPLIT函数即可,示例代码:
SELECT TRIM(value) AS PersonName
FROM YourMainTable
CROSS APPLY STRING_SPLIT(MultiNameColumn, '|')
WHERE TRIM(value) <> ''

场景2:导入时直接拆分多值到关联子表

向导本身不支持导入过程中实时拆分,走两步中转即可:

  1. 按场景1的操作流程,先把包含多值列的源数据全部导入一张临时中转表,多值列整列存为nvarchar类型,不做拆分
  2. 执行一段简单SQL完成拆分插入,把拆分后的单个人名写入关联子表,同时关联主表主键,示例代码:
INSERT INTO dbo.PersonRelatedTable (MainDataID, PersonName)
SELECT 
    staging.ID AS MainDataID,
    TRIM(split.value) AS PersonName
FROM dbo.StagingTempTable staging
CROSS APPLY STRING_SPLIT(staging.MultiNameColumn, '|') split
WHERE TRIM(split.value) <> ''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:54:21