11

我想获取存储过程的结果并将它们放入 CSV 文件中的 FTP 位置。

但问题是我无法创建一个本地/临时文件,然后我可以通过 FTP 访问该文件。

我采用的方法是使用 SSIS 包创建一个临时文件,然后在包中设置一个 FTP 任务来通过 FTP 传输文件,但是我们的 DBA 不允许在任何服务器上创建临时文件。

回复 Yaakov Ellis

我认为我们需要说服 DBA 让我在他们不操作的服务器上至少使用一个共享,或者询问他们将如何做到这一点。

回复凯夫

我喜欢 CLR 集成的想法,但我认为我们的 DBA 甚至不知道这是什么,而且他们可能也不会允许这样做。但我可能能够在可以安排的 SSIS 包中的脚本任务中执行此操作。

4

6 回答 6

15
于 2011-07-23T12:40:36.217 回答
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();
    }
}
于 2008-08-21T18:09:52.473 回答
1

是否有任何可以使用的服务器来创建临时文件?如果是这样,请创建一个返回包含文件内容的数组的 Web 服务。从可以创建临时文件的计算机上调用 Web 服务,使用数组的内容来构建临时文件并将其 ftp 传输过来。

如果根本没有可以创建临时文件的地方,我看不出您将如何通过 FTP 发送任何内容。

于 2008-08-21T17:25:44.357 回答
0

尝试使用 CLR 存储过程。您可能会想出一些东西,但是如果不先创建临时文件,它可能仍然很困难。你能在另一台机器上设置一个共享并写入,然后从那里进行 ftp 吗?

于 2008-08-21T17:23:51.693 回答
0

来自 FTP 服务器的脚本,只需调用存储的 proc。

于 2008-08-31T23:08:07.013 回答
0

但问题是我无法创建一个本地/临时文件,然后我可以通过 FTP 访问该文件。

这个限制没有任何意义,试着和 DBA 好好谈谈并向他/她解释。任何 Windows 进程或作业在适当的位置(即 %TEMP% 文件夹)创建临时文件是完全合理的。实际上,SSIS 运行时本身经常会在那里创建临时文件——所以如果 DBA 允许您运行 SSIS,他就是允许您创建临时文件 :)。

只要 DBA 了解这些临时文件不会给他带来问题或额外的工作量(说明他不必设置特殊权限或备份它们等),他应该同意让您创建它们。

DBA 的唯一维护任务是定期清理 %TEMP% 目录,以防 SSIS 作业失败并留下文件。但无论如何他都应该这样做,因为许多其他进程可能会这样做。一个简单的 SQL 代理作业就可以做到这一点。

于 2008-09-21T08:36:39.667 回答