繁体   English   中英

如何从SQL Server存储过程填充csv文件?

[英]How to populate csv file from SQL Server stored procedure?

如何从SQL Server存储过程填充.csv文件?

我们在服务器上没有Office。 必须从存储过程结果集中填充.CSV文件。

如何不使用SSIS包导出到.CSV

最终结果,我将必须通过将此CSV文件作为报告附加来生成电子邮件警报。

我将不得不使用大容量复制程序实用程序( BCP ),我正在寻找BCP的示例以生成csv文件

有两种方法可以实现:

(1)使用OPENROWSET

尝试实现类似的逻辑:

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
EXEC Sp_TEST

(2)使用bcp

在“参考”部分的第三个链接中:

queryout方法允许您从存储过程的结果中进行BCP操作,这提供了很多可能性,并提供了对文件格式的很多控制。 除了简单的表提取以外,我倾向于使用此方法而不是视图。 我还将格式化存储过程中的每一行。 这意味着可以独立于文件创建来测试格式

declare @sql varchar(8000)
select @sql = 'bcp "exec sp_Test"
   queryout c:\bcp\sysobjects.csv -c -t, -T -S'
+ @@servername
exec master..xp_cmdshell @sql

参考

  1. 如何使用Sql Server存储过程将数据导出到.csv文件。
  2. 如何从SQL Server中的存储过程中生成一个CSV输出文件
  3. 使用BCP和存储过程创建CSV文件
  4. 通过存储过程导出CSV文件
  5. 将选择结果写入CSV文件

看下面的代码。 创建一个存储过程,然后将其用作BCP命令中的源。 然后生成一个文本文件。 链接的代码示例中讨论了定界符。

使用BCP和存储过程创建CSV文件中获取的代码示例

use tempdb
go
create proc s_bcpMasterSysobjects
as
   select   '"' + name + '"'
            + ',' + '"' + convert(varchar(8), crdate, 112) + '"'
            + ',' + '"' + convert(varchar(8), crdate, 108) + '"'
   from master..sysobjects
   order by crdate desc
go
declare @sql varchar(8000)
select @sql = 'bcp "exec tempdb..s_bcpMasterSysobjects"
       queryout c:\bcp\sysobjects.txt -c -t, -T -S'
+ @@servername
exec master..xp_cmdshell @sql

我会用BCP

看例子

declare @sql varchar(2000)
select @sql = 'bcp "SQL QUERY HERE" queryout '+@fileLocation+@fileName+'.csv -c -t, -T -S' + @@servername
    exec master..xp_cmdshell @sql, NO_OUTPUT    

如果您需要查看任何错误或正在执行的操作,只需删除", NO_OUTPUT"

创建一个小的脚本,csv是一种简单的格式:csv =逗号分隔值。 用逗号分隔值的宽度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM