Sql server SQL Server从一个查询输出多个CSV文件

Sql server SQL Server从一个查询输出多个CSV文件,sql-server,csv,Sql Server,Csv,我试图让SQL server从一个查询创建多个CSV文件。目前,我们有7个单独的长时间运行(每个2小时以上)查询,需要输出到单独的CSV文件。我可以创建一个查询,调用所有这些查询,但会生成一个巨大的CSV。有没有办法告诉SQL Server在每个内部查询完成后创建一个单独的CSV 这个问题变得更加重要,因为我们的下一次生产运行将有52个长时间运行的查询,而我的老板不想单独运行每个查询 EXEC dbo.Get_Result_Set1; EXEC dbo.Get_Result_Set2; EXEC

我试图让SQL server从一个查询创建多个CSV文件。目前,我们有7个单独的长时间运行(每个2小时以上)查询,需要输出到单独的CSV文件。我可以创建一个查询,调用所有这些查询,但会生成一个巨大的CSV。有没有办法告诉SQL Server在每个内部查询完成后创建一个单独的CSV

这个问题变得更加重要,因为我们的下一次生产运行将有52个长时间运行的查询,而我的老板不想单独运行每个查询

EXEC dbo.Get_Result_Set1;
EXEC dbo.Get_Result_Set2;
EXEC dbo.Get_Result_Set3;
EXEC dbo.Get_Result_Set4;
EXEC dbo.Get_Result_Set5;
EXEC dbo.Get_Result_Set6;
EXEC dbo.Get_Result_Set7;

你能创建一个代理作业来完成吗?您可以为每个查询执行单独的作业步骤。在步骤部分的高级选项卡下,有一个输出选项

你能创建一个代理作业来完成吗?您可以为每个查询执行单独的作业步骤。在步骤部分的高级选项卡下,有一个输出选项

您可能希望创建一个包作为执行这些存储过程的包装器,而不是当前查询

然后,可以将每个存储过程链接到平面文件输出

这样做的好处是,您应该能够表示不同调用之间所需的任何依赖关系,并且(如果可能)利用一些并行性(如果某些/所有调用之间没有依赖关系)。

您可能希望创建一个包作为执行这些存储过程的包装器,而不是您当前的查询

然后,可以将每个存储过程链接到平面文件输出


这样做的好处是,您应该能够表示不同调用之间的任何所需依赖关系,并且(如果可能)利用一些并行性(如果某些/所有调用之间没有依赖关系).

这不是我想要的答案,但我最终让别人帮我在Visual Studio中编写了一个C#过程,它调用我的每个SQL过程并将每个过程输出到Excel文件。它可以工作,我可以在将来重用它

using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;

namespace StoredProcedureRunner
{
    class Program
    {
        public static void Main(string[] args)
        {
            var storedProcs = new List<string>();

            storedProcs.Add "dbo.Get_Result_Set1");
            storedProcs.Add "dbo.Get_Result_Set2");
            storedProcs.Add "dbo.Get_Result_Set3");
            storedProcs.Add "dbo.Get_Result_Set4");
            storedProcs.Add "dbo.Get_Result_Set5");
            storedProcs.Add "dbo.Get_Result_Set6");
            storedProcs.Add "dbo.Get_Result_Set7");

            foreach (var storedProc in storedProcs)
            {
                var table = GetDataTable(storedProc);
                WriteDataTableToCSV(storedProc + ".csv", table);
            }
        }

        public static DataTable GetDataTable(string storedProc)
        {
            DataTable table = new DataTable();

            using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStrg"].ConnectionString))
            {
                using (var command = new SqlCommand(storedProc, connection))
                {
                    using (var adapter = new SqlDataAdapter(command))
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandTimeout = 0
                        adapter.Fill(table);
                    }
                }
            }

            return table;
        }

        public static void WriteDataTableToCSV(string filename, DataTable table)
        {
            StringBuilder sb = new StringBuilder();

            var columnNames = table.Columns.Cast<DataColumn>().Select(col => col.ColumnName);
            sb.AppendLine(string.Join(",", columnNames));

            foreach(DataRow row in table.Rows)
            {
                var fields = row.ItemArray.Select(field => field.ToString());
                sb.AppendLine(string.Join(",", fields));
            }

            File.WriteAllText(filename, sb.ToString());
        }
    }
}
使用System.Collections.Generic;
使用系统配置;
使用系统数据;
使用System.Data.SqlClient;
使用System.IO;
使用System.Linq;
使用系统文本;
命名空间StoredProcedureRunner
{
班级计划
{
公共静态void Main(字符串[]args)
{
var storedProcs=新列表();
添加“dbo.Get_Result_Set1”);
添加“dbo.Get_Result_Set2”);
添加“dbo.Get_Result_Set3”);
添加“dbo.Get_Result_Set4”);
添加“dbo.Get_Result_Set5”);
添加“dbo.Get_Result_Set6”);
添加“dbo.Get_Result_Set7”);
foreach(storedProc中的变量storedProc)
{
var table=GetDataTable(storedProc);
WriteDataTableToCSV(storedProc+“.csv”,表格);
}
}
公共静态数据表GetDataTable(字符串storedProc)
{
DataTable=新的DataTable();
使用(var connection=new SqlConnection(ConfigurationManager.ConnectionStrings[“ConStrg”].ConnectionString))
{
使用(var命令=新的SqlCommand(storedProc,connection))
{
使用(var adapter=newsqldataadapter(命令))
{
command.CommandType=CommandType.storedProcess;
command.CommandTimeout=0
适配器。填充(表格);
}
}
}
返回表;
}
公共静态无效WriteDataTableToCSV(字符串文件名,数据表)
{
StringBuilder sb=新的StringBuilder();
var columnNames=table.Columns.Cast().Select(col=>col.ColumnName);
sb.AppendLine(string.Join(“,”,columnNames));
foreach(table.Rows中的DataRow行)
{
var fields=row.ItemArray.Select(field=>field.ToString());
sb.AppendLine(string.Join(“,”字段));
}
writealText(文件名,sb.ToString());
}
}
}

这不是我想要的答案,但我最终让别人帮我在Visual Studio中编写了一个C#过程,它调用我的每个SQL过程并将每个过程输出到Excel文件。它可以工作,我可以在将来重用它

using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;

namespace StoredProcedureRunner
{
    class Program
    {
        public static void Main(string[] args)
        {
            var storedProcs = new List<string>();

            storedProcs.Add "dbo.Get_Result_Set1");
            storedProcs.Add "dbo.Get_Result_Set2");
            storedProcs.Add "dbo.Get_Result_Set3");
            storedProcs.Add "dbo.Get_Result_Set4");
            storedProcs.Add "dbo.Get_Result_Set5");
            storedProcs.Add "dbo.Get_Result_Set6");
            storedProcs.Add "dbo.Get_Result_Set7");

            foreach (var storedProc in storedProcs)
            {
                var table = GetDataTable(storedProc);
                WriteDataTableToCSV(storedProc + ".csv", table);
            }
        }

        public static DataTable GetDataTable(string storedProc)
        {
            DataTable table = new DataTable();

            using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStrg"].ConnectionString))
            {
                using (var command = new SqlCommand(storedProc, connection))
                {
                    using (var adapter = new SqlDataAdapter(command))
                    {
                        command.CommandType = CommandType.StoredProcedure;
                        command.CommandTimeout = 0
                        adapter.Fill(table);
                    }
                }
            }

            return table;
        }

        public static void WriteDataTableToCSV(string filename, DataTable table)
        {
            StringBuilder sb = new StringBuilder();

            var columnNames = table.Columns.Cast<DataColumn>().Select(col => col.ColumnName);
            sb.AppendLine(string.Join(",", columnNames));

            foreach(DataRow row in table.Rows)
            {
                var fields = row.ItemArray.Select(field => field.ToString());
                sb.AppendLine(string.Join(",", fields));
            }

            File.WriteAllText(filename, sb.ToString());
        }
    }
}
使用System.Collections.Generic;
使用系统配置;
使用系统数据;
使用System.Data.SqlClient;
使用System.IO;
使用System.Linq;
使用系统文本;
命名空间StoredProcedureRunner
{
班级计划
{
公共静态void Main(字符串[]args)
{
var storedProcs=新列表();
添加“dbo.Get_Result_Set1”);
添加“dbo.Get_Result_Set2”);
添加“dbo.Get_Result_Set3”);
添加“dbo.Get_Result_Set4”);
添加“dbo.Get_Result_Set5”);
添加“dbo.Get_Result_Set6”);
添加“dbo.Get_Result_Set7”);
foreach(storedProc中的变量storedProc)
{
var table=GetDataTable(storedProc);
WriteDataTableToCSV(storedProc+“.csv”,表格);
}
}
公共静态数据表GetDataTable(字符串storedProc)
{
DataTable=新的DataTable();
使用(var connection=new SqlConnection(ConfigurationManager.ConnectionStrings[“ConStrg”].ConnectionString))
{
使用(var命令=新的SqlCommand(storedProc,connection))
{
使用(var adapter=newsqldataadapter(命令))
{
command.CommandType=CommandType.storedProcess;
command.CommandTimeout=0
适配器。填充(ta)