如何使用OPENROWSET导出分号分隔、无引号的CSV数据
解决方案
方法1:使用schema.ini配置文件(推荐)
Microsoft ACE OLEDB驱动读取文本文件格式时会优先读取导出目录下的schema.ini配置文件,你可以通过该文件自定义分隔符、引号规则等参数:
- 在你的导出目录
C:\shared_files下新建名为schema.ini的文本文件,写入以下配置:
[existing_file.csv] Format=Delimited(;) ColNameHeader=True CharacterSet=65001 TextDelimiter=none
参数说明:
Format=Delimited(;):指定字段分隔符为分号ColNameHeader=True:保留第一行作为表头CharacterSet=65001:指定导出文件编码为UTF-8,如需使用GBK编码可替换为936,ANSI编码替换为1252TextDelimiter=none:取消字段两端的引号包裹
如果需要修改导出文件后缀,只需将schema.ini中括号内的文件名替换为你的实际文件名即可。
- 无需修改你原有的OPENROWSET查询语句,直接执行即可得到符合要求的导出结果。
方法2:字段拼接导出(无需修改配置文件)
如果不想新增配置文件,你可以直接在SELECT语句中将所有字段按分号拼接为单个字段输出,此时驱动不会自动添加引号:
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=C:\shared_files;HDR=YES;FMT=Delimited','SELECT * FROM [existing_file.csv]') SELECT CONCAT( CAST(field_A AS VARCHAR(10)), ';', field_B, ';', field_C ) FROM myTable
注意:如果字段存在空值,建议使用ISNULL(字段名, '')处理避免拼接结果出现NULL。
注意事项
- 需保证SQL Server服务运行账号拥有
C:\shared_files目录的读写权限 - 安装的Microsoft Access Database Engine(ACE驱动)位数需与SQL Server版本位数一致
内容的提问来源于stack exchange,提问作者jMarcel
相关产品推荐
相关产品推荐

