如何从SQL Server存储过程填充.csv
文件?
我们在服务器上没有Office。 .CSV
文件必须从存储过程结果集中填充。
如何在不使用SSIS包的情况下导出到.CSV
?
最终结果,我将不得不通过将此CSV文件作为报告附加来生成电子邮件警报。
我将不得不使用大容量复制程序实用程序(BCP
),我正在寻找BCP的示例以生成csv文件
答案 0 :(得分:1)
有两种方法可以实现:
尝试实现类似的逻辑:
INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=D:\;HDR=YES;FMT=Delimited','SELECT * FROM [FileName.csv]')
EXEC Sp_TEST
在“参考”部分的第三个链接中:
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 :(得分:0)
创建一个小脚本,csv是一种简单的格式:csv =逗号分隔值。用逗号分隔值的宽度。
答案 2 :(得分:0)
查看下面的代码。创建一个存储过程,然后将其用作BCP命令中的源。然后生成一个文本文件。链接的代码示例中讨论了定界符。
摘自Creating CSV Files Using BCP and Stored Procedures
的代码示例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
答案 3 :(得分:0)
我会使用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"