SQL Server执行BULK INSERT报错:FORMAT附近存在语法错误
解决BULK INSERT导入CSV时的"FORMAT附近存在语法错误"问题
问题原因
SQL Server的BULK INSERT语句不支持FORMAT = 'CSV'参数,该参数仅适用于OPENROWSET(BULK...)语法,这就是触发语法错误的直接原因。
解决方案1:修改BULK INSERT语句,使用CSV标准分隔符
直接替换FORMAT = 'CSV'为CSV对应的字段和行终止符配置,同时根据文件情况补充必要选项:
-- 修正后的批量插入语句 BULK INSERT dbo.ADDRESSSCHEDULE_Backup FROM 'C:\Users\azenk\Desktop\SQL\Exports\AddressSchedule.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', -- CSV默认字段分隔符 ROWTERMINATOR = '\r\n', -- Windows系统换行符,Linux/macOS可改为'\n' QUOTED_IDENTIFIER = ON, -- 处理带双引号包裹的字段(如字段内容含逗号) CODEPAGE = '65001' -- 若文件为UTF-8编码需添加,GBK则用'936' )
说明:如果你的CSV文件没有带引号的字段,可以去掉QUOTED_IDENTIFIER = ON;行终止符需匹配实际文件的换行格式。
解决方案2:使用OPENROWSET配合FORMAT='CSV'参数
如果想保留FORMAT = 'CSV'的写法,可以改用OPENROWSET结合INSERT INTO的方式:
-- 通过OPENROWSET导入CSV数据 INSERT INTO dbo.ADDRESSSCHEDULE_Backup SELECT * FROM OPENROWSET( BULK 'C:\Users\azenk\Desktop\SQL\Exports\AddressSchedule.csv', FORMAT = 'CSV', FIRSTROW = 2 ) AS csv_data
注意:使用该方式需要先启用SQL Server的Ad Hoc Distributed Queries配置,执行以下语句开启(操作完成后建议关闭以保障安全):
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
内容的提问来源于stack exchange,提问作者azenk
相关产品推荐
相关产品推荐

