如何在SSMS中不使用BCP将SQL存储过程的表数据导出为CSV
不使用BCP导出SQL Server demo表为CSV的实现方案
前置配置(仅需执行一次)
需要先开启SQL Server自带的OLE Automation Procedures功能,无需安装额外工具:
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ole Automation Procedures', 1; RECONFIGURE;
完整存储过程代码
适配Test数据库demo表的字段结构,自带表头、特殊字符转义处理:
USE Test GO CREATE PROCEDURE ExportDemoToCSV @ExportPath NVARCHAR(200) -- 传入导出完整路径,示例:'C:\Export\demofile.csv' AS BEGIN SET NOCOUNT ON; DECLARE @FileHandle INT, @OLEResult INT DECLARE @CSVContent NVARCHAR(MAX), @Header NVARCHAR(MAX) -- 拼接CSV表头,带空格的字段按标准CSV规则用双引号包裹 SET @Header = '"TRANSACT TYPE","TRANSACT_NUMBER","BALANCE","CREDIT AMOUNT","ACCOUNTING_DATE"' SET @CSVContent = @Header + CHAR(13) + CHAR(10) -- 拼接所有行数据,自动转义字段内的双引号、逗号等特殊字符 SELECT @CSVContent = @CSVContent + '"' + REPLACE(CAST([TRANSACT TYPE] AS NVARCHAR(MAX)), '"', '""') + '",' + '"' + REPLACE(CAST([TRANSACT_NUMBER] AS NVARCHAR(MAX)), '"', '""') + '",' + '"' + REPLACE(CAST([BALANCE] AS NVARCHAR(MAX)), '"', '""') + '",' + '"' + REPLACE(CAST([CREDIT AMOUNT] AS NVARCHAR(MAX)), '"', '""') + '",' + '"' + REPLACE(CONVERT(NVARCHAR(30), [ACCOUNTING_DATE], 120), '"', '""') + '"' + CHAR(13) + CHAR(10) FROM demo -- 创建文件对象写入内容 EXEC @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FileHandle OUT IF @OLEResult <> 0 GOTO ErrorHandler -- 最后一个参数-1为UTF-16编码,需UTF-8可改为1,适配不同编码需求 EXEC @OLEResult = sp_OAMethod @FileHandle, 'CreateTextFile', @FileHandle OUT, @ExportPath, 2, -1 IF @OLEResult <> 0 GOTO ErrorHandler EXEC @OLEResult = sp_OAMethod @FileHandle, 'Write', NULL, @CSVContent IF @OLEResult <> 0 GOTO ErrorHandler EXEC sp_OADestroy @FileHandle PRINT 'CSV导出成功,文件路径:' + @ExportPath RETURN ErrorHandler: DECLARE @ErrorInfo NVARCHAR(255) EXEC sp_OAGetErrorInfo @FileHandle, NULL, @ErrorInfo OUT PRINT '导出失败,错误信息:' + @ErrorInfo EXEC sp_OADestroy @FileHandle RETURN END GO
调用方式
直接传入导出路径执行即可:
EXEC ExportDemoToCSV @ExportPath = 'C:\Export\demofile.csv'
注意事项
- 导出路径对应的文件夹需提前创建,且要给SQL Server服务的启动账号授予该文件夹的读写权限,你之前BCP报错大概率也是权限问题导致
- 单表数据量超过千万行时不建议使用该方案,大字符串拼接会占用较高内存,超大数量导出建议改用SSIS工具
内容的提问来源于stack exchange,提问作者mary07
相关产品推荐
相关产品推荐

