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

如何将含GUID列的CSV文件导入SQL Server的uniqueidentifier类型列

解决SSMS导入CSV中GUID到uniqueidentifier列的可行方案

你遇到的Invalid cast from 'System.String' to 'System.Guid' (mscorlib)报错是SSMS导入向导的隐式类型转换逻辑问题,.NET层面的强转无法兼容CSV中带大括号的GUID字符串格式,可通过以下三种方案解决:

方案1:临时中转字符串类型后转换(操作最简单)

  • 导入向导走到「指定表复制或查询」步骤后,进入「列映射」配置页
  • 将目标表中存储GUID的列类型暂时设置为NVARCHAR(38)(适配带大括号的GUID最大长度),完成数据导入
  • 导入完成后先执行校验查询,确认所有数据都符合GUID格式:
-- 检查是否存在无法转换为GUID的异常数据,无返回结果则表示全部合规
SELECT AccountGuid 
FROM 你的目标表名
WHERE TRY_CAST(AccountGuid AS UNIQUEIDENTIFIER) IS NULL
  • 确认无异常后执行语句修改列类型即可:
ALTER TABLE 你的目标表名
ALTER COLUMN AccountGuid UNIQUEIDENTIFIER;

方案2:调整平面文件源的列属性(无需后续修改表结构)

  • 导入向导第一步选择「平面文件源」并选中目标CSV后,进入「高级」配置页
  • 找到存储GUID的列,将其数据类型设置为DT_WSTR,输出列宽设置为38
  • 后续映射时直接关联目标表的UNIQUEIDENTIFIER类型列即可,向导会自动完成合法转换,不会触发类型报错

方案3:用SQL命令直接导入(适合批量导入场景)

跳过SSMS图形化向导的隐式转换逻辑,直接用BULK INSERT或OPENROWSET导入,在SQL层面完成类型转换,示例:

BULK INSERT 你的目标表名
FROM 'C:\本地CSV文件的完整路径\文件名.csv'
WITH (
  FORMAT = 'CSV',
  FIRSTROW = 2, -- 跳过首行表头
  FIELDTERMINATOR = ',',
  ROWTERMINATOR = '\n'
)

注意:如果导入后日期格式异常,可在导入后单独执行日期字段的格式转换,或在OPENROWSET中自定义字段转换规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:57:03