私が探していた答えではありませんが、誰かが私のSQLプロシージャを呼び出してExcelファイルに出力するVisual StudioでC#プロシージャを書く手助けをしていました。それは機能し、私は将来それを再利用することができます。
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());
}
}
}
私はジョブを作成しようとしましたが、動作していないようです。それは決して私にファイル名を尋ねたことはなく、実行するように思えたが、出力を生成しなかったと思った。私は仕事で間違ったものを設定することは可能ですが、すべてが正しいように見えました。 –
出力を要求しません。 SSISを使用することを示唆している他の答えと同じように、SSISを使用することをお勧めします。実際にはより良い考えですが、出力パスはステップの「出力ファイル」ボックスにハードコードする必要があります。 – NathanAck
出力ファイルに関する注釈をありがとう。それは理にかなっている。私はSSISのオプションを探しています。 –