【问题标题】:AWS RDS SQL Server : export large data to CSV file from stored procedureAWS RDS SQL Server:将大数据从存储过程导出到 CSV 文件
【发布时间】:2020-03-13 08:53:19
【问题描述】:

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

我们的 Java 应用程序当前使用一个使用 xp_cmdshell 执行 BCP.exe 的存储过程(Bulk Copy Program 是一个命令行工具,用于针对 Microsoft SQL Server 导入或导出数据)将大数据导出到 CSV 文件。

由于xp_cmdshell不能在RDS上启用,我们不能用它来执行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 上吗?

【问题讨论】:

  • 如果这是一次性要求,您可以使用 SQL Server Management Studio。运行您的 SELECT 查询,然后右键单击结果集中的某处并选择将结果另存为...。您可以将其保存为格式正确的 CSV 文件。
  • @O.Jones 是的,但这不是一次性的要求。我正在考虑开发一个 SSIS 包..

标签: sql-server amazon-web-services amazon-s3 amazon-rds sqlbulkcopy


【解决方案1】:

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

不。 BCP 命令有 TSQL 替代品,但仅适用于 IMPORT。

最好的办法是编写一个程序,通过某种 SELECT 语句从 SQL 返回数据并自己写出文件 - 基本上是 BCP 的自制替代品。

没有开箱即用的东西可以替代 BCP,因为所有非 BCP 批量功能要么用于编程使用,要么仅用于导入。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2021-04-04
      • 1970-01-01
      相关资源
      最近更新 更多