使用SQL将CSV文件导出到FTP站点

时间:2017-08-15 22:10:09

标签: sql-server

有没有人知道如何在SQL管理工作室中将CSV文件导出到FTP站点? 我目前正在使用 exec xp_cmdshell' net use \ ftp://213.32.32 \ user:fjdowj ddfdf' 但它根本不起作用 感谢

2 个答案:

答案 0 :(得分:0)

您可以尝试使用CLR存储过程生成CSV文件并导出到FTP站点。

生成CSV文件到路径如下:

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路径。 FTP Directly in SQL

答案 1 :(得分:-1)

在所有最新版本的SQL Server上默认禁用

xp_cmdshell(出于很好的理由)。你可以手动重新启用它(我鼓励你不要),但是你需要一个ftp命令行工具来上传 - 我不认为net use命令会这样做特技。如果您确实将ftp端点映射为具有net use作为SQL Server服务用户的驱动器,则在运行FTP作业之前,您仍需要实现将文件从SSMS复制到服务器上的文件系统。 / p>