将SQL Server 2012报告安排到SFTP

时间:2015-09-02 15:03:48

标签: sql-server-2012 scheduled-tasks sftp

我需要每晚自动上传报告并使用SFTP进行转移。我可以在SQL Server 2012中创建报告,但如何以平面文件格式(.csv / .txt)自动将其保存到特定文件夹?

保存后,需要安排上传并使用SFTP进行转移。有人可以建议并协助我吗?非常感谢你。

更新:这是提取部分。我使用SQLCMD创建了一个我在Windows任务管理器中安排的.bat文件。现在我可以使用WinSCP命令安排它自动上传。只是想为未来的用户更新答案。

SQLCMD -S Servername -d databasename -U username -P password -i C:\sample.sql -o C:\sampletemp.txt -s"|" -W
findstr /B /V /C:"----" "C:\sampletemp.txt" > "C:\finaloutput.txt"
del "C:\sampletemp.txt"

2 个答案:

答案 0 :(得分:1)

使用WinSCP设置SSIS SFTP任务:

(我是WinSCP的作者)

答案 1 :(得分:1)

如果您有SQL Server Standard或Enterprise,则可以使用SSIS。如果你有SQL Server Web或更好(即不是Express),那么你有SQL Agent。

“我如何使用SSIS?”是一个有些超出Stack Overflow问题范围的问题。这是一个完整的ETL包。微软有一些basic SSIS tutorials你可以通过,但它是一个非常深的系统。

这就是你应该怎么做的。 MS如何打算让人们去做。您还可以使用“导入/导出向导”,该向导允许您在向导结束时保存SSIS包以供以后使用。但是,这无助于编写WinSCP传输脚本。

如果感觉就像使用大锤来钉钉子(或者你使用的是SQL Express或Web),那么最基本的方法就是使用PowerShell脚本。在2008/2008 R2中,有SqlServerCmdletSnapin100管理单元。从2012年开始,更改为SQLPS模块。请注意,管理单元(Get-PSSnapin -Registered)与模块(Get-Module -ListAvailable)不同,但它们的功能非常相似;模块只是更新,AFAIK。他们都有Invoke-Sqlcmd。如果你没有在运行脚本的机器上安装SQL Server,你也可以在System.Data.SqlClient中使用.Net方法,但这需要更多参与。

所以你可以这样做:

#Add the relevant snap-in/module; for 2012 that's sqlps
#Add-PSSnapin SqlServerCmdletSnapin100;
Import-Module sqlps;

#Fetch the data
$Query = 'SELECT Field1, Field2, Field3 FROM MyView ORDER BY Field1;';
$Data = Invoke-Sqlcmd -Server MyServer -Database MyDatabase;

#Save data to file
$Data | Export-Csv -Path 'C:\Script\MyExportFile.csv' -NoTypeInformation;

#Run the WinSCP script to upload the data
#Note that --% is Powershell's "Stop parsing" operator; it keeps the parser from messing with the arguments.
&"C:\Program Files (x86)\WinSCP\WinSCP.exe" --% -console -script="C:\Script\WinSCPScript.txt" -log="C:\Script\Logs\WinSCP-!S-!Y-!M-!D-!T.log" -xmlgroups

然后,您只需编写WinSCP脚本文件代码,并使用Windows任务计划程序安排脚本。