将表导出到文本文件的最快方法是什么


17

我将拥有一个SQL Server 2012数据库和一个包含300万行和50列的表。无人值守的后台.net进程(可能发出一些SQL或Powershell命令)将其导出到文本文件(每一行数据一行)的最快方法是什么?.net进程应知道何时完成导出或是否有任何错误。数据类型将为all intnvarchar

我假设使用ado.net来执行select *命令并遍历数据读取器并为每条记录写入文件的纯C#代码将很慢,而且我无法并行处理。

理想情况下,导出将导出到远程共享网络文件夹,而不是SQL Server计算机上的本地文件夹。SQL Server将是一个HA群集。SSIS是否更适合于此,不需要数据转换?

.Net进程将在计算机A上运行,在计算机B上运行SQL Server,最终文件目标是网络共享。一种选择是SQL Server将文件直接写入网络共享。另一个选项是SQL Server写入计算机A,然后在写入文件时,.net进程将其复制到网络共享。我没有正式的SLA,但是希望30分钟-1小时的文件写入时间。


3
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."-.NET应用程序将从何处运行?最坏的情况是,这可能意味着数据必须经过2个网络跃点,这可能是最大的瓶颈。此外,行数也无关紧要-大约总数据大小是多少?您是否需要为此过程满足的性能SLA?
乔恩·塞格尔

Answers:


10

如果您想老看它的执行情况,那么遍历所有这些文章是一个选项。

您应该尝试的一些其他选项是:

您可以在循环另一个会话时尝试所有这些选项,只是为了好玩:-)。


4

我只会使用“导入导出向导”。最后,您可以选择保存任务,然后可以使用SQL Server Agent计划任务。将您自己添加为操作员,并在服务器上配置DB Mail,它可以在作业完成或失败时向您发送电子邮件。

说真的,为什么要重新发明轮子呢?

http://msdn.microsoft.com/en-us/library/ms140052.aspx


一点也不差,实际上这最终节省了一个SSIS包。如果这是一项一次性任务,那就可以解决。
玛丽安2012年

2

其他人则说bcp应该是最快的方法,但是我看不出CLR解决方案有什么优势。在插入数据库表时,各种批量复制实现将始终获胜。这主要是由于它们最大程度地减少了日志记录并启用了多线程写入。写入平面文件时,您没有这些约束。

在我的工作中,我们使用CLR将查询输出转储到文件中。我们还合并了Ionic.Zip.dll,以便在创建后可以自动将文件压缩。

这是op声称blob上bcp速度两倍的示例:https : //stackoverflow.com/questions/10325338/fastest-way-to-export-blobs-from-table-into-individual-files


这个问题不是很详细。我建议您阅读以下问题- 在此处优化BLOB数据的BCP性能。它肯定会给您关于仅使用BCP的许多播放选项的想法:-)。
玛丽安2012年

我看到了链接并完全同意。但是大多数优化点是用于将数据加载到sql服务器中。当将sql数据写入平面文件时,我还没有发现任何与bcp有关的事实都比streamwriter或filestream CLR解决方案更快。
brian 2012年

1

您可以创建一个简单的SSIS包:

这是一个高级的方法:

  1. 在连接管理器中创建到数据库的OLEDB连接
  2. 将数据流转换拖动到控制流中,然后单击它以转到数据流。
  3. 将OLEDB Source从工具箱拖到数据流中,然后对其进行编辑,以便使用在步骤1中创建的连接将其连接到所需的表。
  4. 将平面文件目标从工具箱拖到数据流中,然后将OLEDB源连接到它。
  5. 在“平面文件目标”中选择“新建”,它将创建具有相同列结构的新平面文件,您可以使用所需的分隔符,或者如果愿意,可以使用固定文件。
  6. 运行。

任何菜鸟都应该能够弄清楚这一点。反GUI人士不喜欢这种解决方案,因此请保留有关这一点的评论,对于那些使用BCP苦苦挣扎的技术含量较低的人来说,它只是一种选择。

您在如何格式化数据文件方面更具灵活性。您可以在BCP和所有其他功能中执行此操作,但是这样做可以消除复杂性。但是,这样做的好处很小,因为您可以放入自定义文件标题,并在第一行中创建一个“列名”,这将使平面文件更易于使用。

不要忘记保存它,如果创建一次,可能会再次询问您!希望这可以帮助..


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.