SQL Server导入其余CSV正常 仅plays.csv导入报错如何解决
SQL Server导入plays.csv截断报错修复方案
核心报错原因
反复调整字段类型仍然报错的核心原因根本不是quarter字段本身长度/类型不匹配,是初始导入配置的两个错误导致列错位:
- 未设置文本限定符:Kaggle提供的标准CSV文件用双引号包裹含逗号、换行的长文本内容(比如战术描述、备注字段),把
Text Qualifier设为none后,解析器会把文本内容里的逗号当成分隔符拆列,直接导致字段错位——本该落到长文本列的内容被错分到quarter列,自然触发截断报错,报错提示明确指向第3行数据出错,就是因为前两行数据没有带逗号的包裹文本,到第三行碰到带逗号的战术描述就出现列错位。 - 编码配置错误:未勾选Unicode、选择1252(ANSI-拉丁I)代码页的配置,碰到球员名里的重音字符、特殊标点时会触发字符不匹配错误,和截断报错叠加出现。
分步修复操作
- 重新启动SQL Server导入导出向导,在Flat File Source配置页调整以下参数:
- 将
Text Qualifier设置为双引号" - 勾选
Unicode选项,自动适配UTF-8编码,不再使用1252代码页 - 其余分隔符、表头配置保持原有设置不变
- 将
- 进入列映射配置环节时,不要全用默认参数:
- 将
quarter、down、yardlineNumber这类数值字段对应目标表的int/tinyint类型 - 将
playDescription、playType这类字符串字段的默认长度从50调整为2000,或者直接设为NVARCHAR(MAX),避免真实长文本内容触发截断
- 将
- (可选)如果需要快速验证配置是否正确,可以在高级设置里临时把所有列的截断处置规则从“截断即报错”改成“忽略截断”,先导入100行数据核对字段对齐情况,确认没有列错位、内容缺失后再全量导入。
快速替代方案
如果不想反复调整向导配置,可以直接在SSMS里执行BULK INSERT命令完成导入,稳定性比可视化向导更高,参考代码如下:
-- 提前建好目标表,字符串字段统一设为NVARCHAR(2000)避免长度不足 BULK INSERT dbo.plays FROM 'C:\Users\Owner\Desktop\nflcomp\plays.csv' WITH ( FORMAT = 'CSV', FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a', CODEPAGE = '65001', TABLOCK );
验证小技巧:直接用记事本打开本地plays.csv定位到第3行,就能看到该行存在被双引号包裹、内部带逗号的长文本内容,这就是之前列错位的直接证据。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

