2017-08-15 69 views
-1

有誰知道如何將CSV文件導出到SQL管理工作室的FTP站點?我目前使用 EXEC xp_cmdshell的淨使用\ ftp://213.32.32 \用戶:fjdowj ddfdf' 不過,這並不在所有 感謝使用SQL將CSV文件導出到FTP站點

+2

究竟你的意思是什麼都不工作?首先,213.32.32不是有效的IP地址。 – mallan1121

+0

謝謝你的提問。 SQL查詢不起作用。我真的很抱歉,我僞造了IP地址。但我測試了真正的FTP站點。它工作正常。我能夠上傳文件或刪除文件。我只是不能將CSV文件導出到FTP站點。我有一個每天執行SQL查詢並將csv文件導出到ftp站點的SQL作業。現在的問題是,我不知道如何建立到SQL中的FTP站點的連接 – user126253

回答

-1

xp_cmdshell默認禁用對所有最新版本的工作(有很好的理由) SQL Server。您可以手動重新啓用它(並且我鼓勵您不要),但是然後您需要一個ftp命令行工具來執行上傳 - 我不認爲net use命令會執行此操作。如果您確實設法將作爲驅動器的ftp端點映射爲net use作爲SQL Server服務用戶,則在運行FTP作業之前,仍需要將文件從SSMS複製到服務器上的文件系統。

+0

感謝您的答案。我沒有設法在SQL中使用net use來映射合適的網站。這真是我的問題。如果您有任何關於在SQL中連接到FTP站點的想法,我將不勝感激,以便我可以將CSV文件導出到FTP站點。 – user126253

0

您可以嘗試使用CLR存儲過程生成CSV文件並導出到FTP站點。

public static void GenerateCSVFile(SqlString queryToGetData, SqlString folderPath) 
     { 
      string sqlCommand; 
      string filePath; 
      try 
      { 

        sqlCommand = queryToGetData.ToString(); 
        filePath = folderPath.ToString() + "\\GeneratedFile" + ".csv"; 

       using (SqlConnection connection = new SqlConnection(
       "context connection=true")) 
       { 
        connection.Open(); 

        SqlCommand command = new SqlCommand(sqlCommand,connection); 
        using (SqlDataReader reader = command.ExecuteReader()) 
        { 
         DataTable table = new DataTable(); 
         table.Load(reader); 

         StringBuilder builder = new StringBuilder(); 
         List<string> columnNames = new List<string>(); 
         List<string> rows = new List<string>(); 

         foreach (DataColumn column in table.Columns) 
         { 
          columnNames.Add(column.ColumnName); 
         } 

         builder.Append(string.Join(",", columnNames.ToArray())).Append("\n"); 

         foreach (DataRow row in table.Rows) 
         { 
          List<string> currentRow = new List<string>(); 

          foreach (DataColumn column in table.Columns) 
          { 
           object item = row[column]; 

           currentRow.Add(item.ToString()); 
          } 

          rows.Add(string.Join(",", currentRow.ToArray())); 
         } 

         builder.Append(string.Join("\n", rows.ToArray())); 

         using (StreamWriter writer = new StreamWriter(filePath)) 
         { 
          writer.Write(builder.ToString()); 
         } 
        } 
       } 
      } 
      catch(Exception ex) 
      { 
       throw; 
      } 
     } 

一旦生成的文件,你可以用下面的方法來加載到FTP路徑:下面

生成CSV文件的路徑給出。 FTP Directly in SQL

+0

感謝您的回答。我能夠生成CSV文件,但我在將CSV文件傳輸到FTP站點時遇到問題。我直接在SQL文章中閱讀你的FTP。我有一些關於它的問題。我不確定入門步驟。可以告訴我更多關於它的例子,如何創建一個可視化的經典庫?我也很好奇,有沒有其他方式可以連接到SQL中的FTP站點?非常感謝你 – user126253