我需要每晚自动上传报告并使用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"
答案 0 :(得分:1)
使用WinSCP设置SSIS SFTP任务:
在Visual Studio中create new Integration Services Project project。
在项目中添加新的执行流程任务。
将其指向带有参数的winscp.exe
可执行文件,以启动上传脚本。
有关详细信息,请参阅SFTP Task for SSIS的WinSCP指南。
(我是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任务计划程序安排脚本。