AWS RDS SQL 服务器:将大数据从存储过程导出到 CSV 文件

AWS RDS SQL Server : export large data to CSV file from stored procedure

从托管 SQL 服务器迁移到作为托管服务 (SaaS) 的 AWS RDS,我们无法启用 xp_cmdshell

我们的 java 应用目前使用一个存储过程,该过程使用 xp_cmdshell 来执行 BCP.exe(批量复制程序是一个命令行工具,用于导入或针对 Microsoft SQL 服务器) 导出数据以将大数据导出到 CSV 文件。

并且由于无法在 RDS 上启用 xp_cmdshell,因此我们无法使用它来执行 BCP。 存储过程代码:

declare @bcp_header varchar(8000)
declare @bcp varchar(8000)
declare @bcpCopy varchar(8000)
declare @deleteFile varchar(300)

select @bcp_header = 'BCP "' + @header_select + '" queryout ' + @pathAndFileName +'.csv  -c -C 1252 -t; -T '
select @bcp = 'BCP "' + @sql_export + '" queryout  '+ @pathAndFileName +'_data.csv -c -C 1252 -t; -T '
select @bcpCopy = 'TYPE  '+ @pathAndFileName +'_data.csv >> '+ @pathAndFileName +'.csv'
select @deleteFile = 'DEL '+@pathAndFileName +'_data.csv'

exec master..xp_cmdshell @bcp_header
exec master..xp_cmdshell @bcp
exec master..xp_cmdshell @bcpCopy 
exec master..xp_cmdshell @deleteFile

我们可以使用 T-SQL 命令将查询结果导出到 CSV 文件并将其托管在 S3 上吗?

Can we use a T-SQL command to export the query result to a CSV file and host it on S3 ?

没有。 BCP 命令有 TSQL 种替代方法,但仅适用于 IMPORT。

你最好的选择是编写一个程序,通过某种 SELECT 语句 returns 来自 SQL 的数据并自己写出文件 - bascailly 是 BCP 的自制替代品.

没有任何现成的东西可以作为 BCP 的替代品,因为所有非 BCP 批量功能要么用于编程用途,要么仅用于导入。

答案是在使用 SSIS 实例使用的 SQL 服务器的 SSIS 包中使用 BCP.exe