【问题标题】:Bulk Insert into .CSV destination file using c# in SSIS script task在 SSIS 脚本任务中使用 c# 批量插入 .CSV 目标文件
【发布时间】:2018-05-13 07:43:17
【问题描述】:

我需要将一堆 SQL Server 表数据动态插入到 .CSV 文件中,我使用控制流中的每个循环和脚本任务将数据写入 CSV 文件,目前,我正在逐行读取从源代码并将其写入 CSV 文件,这需要很多时间,我正在寻找批量插入选项以从 SQL 服务器写入 .CSV 文件目标。我确实花了一些时间来研究它,但我发现的只是 SqlBulkCopy 类选项,它仅在目标是 SQL Server 表时才有效,你能否帮助我提供一种适用于 SQL Server 表作为源和 CSV 文件作为源的方法目的地。

【问题讨论】:

  • 您是否有权使用从 Sql Server 到 Excel 的导出向导。您是否也查找过使用 SSIS 批量导入/导出的示例 另一个问题或要查看的内容是 SSRS,有多少行正在返回..您可以创建 SSRS 报告,它也为您提供了几个导出数据选项,您根本不必编写自己的导出到 excel 代码.. 只需考虑一些选项
  • 获得 SQL 表中的行后,您是否尝试过 System.IO.File.WriteAllText() 方法将所有行一次写入 CSV 文件? - 见msdn.microsoft.com/en-us/library/ms143375(v=vs.110).aspx
  • 您好感谢您的回复,我尝试了 WriteAllText() 但性能几乎相同,我使用的是 OleDbdatareader.read() 方法,该方法一次从源表中读取一行,这正在消耗很多时候,你知道我们可以通过哪种方法批量读取行并使用WriteAll Text一次将它们全部写入。
  • 您是否使用 SqlDataReader 从 DB 表中读取行?根据您返回的行数,您可以通过拆分为多个线程并使用分页从表中加载数据来获得更好的性能。例如stackoverflow.com/questions/14339365/…

标签: c# sql-server tsql ssis etl


【解决方案1】:

您可以尝试使用 bcp 实用程序将 SQL Server 数据导出为 CSV

bcp "query" queryout data_file -S server_name[\instance_name] -U login_id -P password -c

例子:

bcp "EXEC MyDatatabase.dbo.MyTable" queryout "C:\DataBCP.csv" –c –t , –S (local) –T

您可以在 C# 代码中使用 System.Diagnostics.Process() 调用 bcp 实用程序:

    Process p = new System.Diagnostics.Process();
    ProcessStartInfo pi = new System.Diagnostics.ProcessStartInfo();
    pi.FileName = "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\bcp.exe";
    pi.Arguments = "EXEC MyDatatabase.dbo.MyTable\" queryout \"C:\\DataBCP.csv\" –c –t , –S (local) –T";
    p.StartInfo = piOriginal;
    pi.UseShellExecute = false;
    p.Start();
    p.WaitForExit();
    p.Close();

【讨论】:

  • 您好,感谢您的回复,实际上我正在使用 OLEDB 连接类并将 SQL Server 连接字符串作为变量传递给它以连接到脚本任务中的数据库,但您使用的是 pi.Arguments = "EXEC MyDatatabase .dbo.MyTable\,我正在考虑这将如何适用于我的场景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 2012-03-31
相关资源
最近更新 更多