我想获取存储过程的结果,并将它们放入CSV文件到FTP位置。
但问题是,我无法创建一个本地/临时文件,然后我可以FTP。
我采用的方法是使用SSIS包创建一个临时文件,然后在包中使用FTP任务来FTP文件,但是我们的DBA不允许在任何服务器上创建临时文件。 / p>
我认为我们需要说服DBA让我至少在他们不运营的服务器上使用一个共享,或者询问他们将如何操作。
我喜欢CLR集成的想法,但我不认为我们的DBA甚至不知道那是什么 lol ,他们也许不会允许它。但我可能会在可以安排的SSIS包中的脚本任务中执行此操作。
答案 0 :(得分:14)
答案 1 :(得分:9)
如果您被允许实现CLR集成程序集,您实际上可以使用FTP而无需编写临时文件:
public static void DoQueryAndUploadFile(string uri, string username, string password, string filename)
{
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(uri + "/" + filename);
ftp.Method = WebRequestMethods.Ftp.UploadFile;
ftp.Credentials = new System.Net.NetworkCredential(username, password);
using(StreamWriter sw = new StreamWriter(ftp.GetRequestStream()))
{
// Do the query here then write to the ftp stream by iterating DataReader or other resultset, following code is just to demo concept:
for (int i = 0; i < 100; i++)
{
sw.WriteLine("{0},row-{1},data-{2}", i, i, i);
}
sw.Flush();
}
}
答案 2 :(得分:1)
您可以在任何地方使用服务器来创建临时文件吗?如果是这样,请创建一个返回包含该文件内容的数组的Web服务。从可以创建临时文件的计算机调用Web服务,使用该数组的内容构建临时文件并将其翻转过来。
如果根本没有,你可以在哪里创建一个临时文件,我看不出你如何通过FTP发送任何内容。
答案 3 :(得分:0)
尝试使用CLR存储过程。您可能会想出一些东西,但如果没有先创建临时文件,它可能仍然很难。你可以在另一台机器上设置共享并写入,然后从那里ftp吗?
答案 4 :(得分:0)
来自FTP服务器的脚本,只需调用存储过程。
答案 5 :(得分:0)
但问题是我无法创造 一个本地/临时文件,然后我可以FTP。
这个限制没有任何意义,试着很好地与DBA交谈并向他/她解释。任何Windows进程或作业在适当的位置创建临时文件(即%TEMP%文件夹)是完全合理的。实际上,SSIS运行时本身经常在那里创建临时文件 - 所以如果DBA允许你运行SSIS,那么 允许你创建临时文件:)。
只要DBA明白这些临时文件不会给他造成问题或额外的工作量(解释他不必须设置特殊权限,或者备份它们等),他应该同意让你创造它们。
DBA的唯一维护任务是定期清理%TEMP%目录,以防SSIS作业失败并使文件落后。但无论如何他应该这样做,因为许多其他过程也可能这样做。一个简单的SQL代理作业就是这样做的。