带逻辑的SqlServer批量插入

时间:2013-03-26 13:47:29

标签: sql-server ssis sql-server-2008-r2 bulkinsert bcp

我正在使用SqlServer 2008R2,我需要非常快速地加载9亿条跟随结构的记录。

VARCHAR(20)
VARCHAR(10)
VARCHAR(50)
VARCHAR(15)
VARCHAR(20)
VARCHAR(10)
VARCHAR(4)
VARCHAR(3)
VARCHAR(10)
日期时间
日期时间
日期时间
日期时间
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)
十进制(19,2)

(我有各种格式,一些最多100列数据 - 总共加载221GB数据)

问题是数据来自旧的OS390,如果日期为空,则会将其发送到文本文件中,如99999999。
将此数据转换为null的最佳方法是什么?在Oracle中,您可以将逻辑放在格式中,您可以使用BCP吗?或者是使用SSIS同时加载和转换实现这一目标的最快方法?或者用触发器或什么?

作为文本加载然后在数据库中转换我不认为是由于数据量的选择。

1 个答案:

答案 0 :(得分:0)

您始终可以使用.NET客户端应用程序以任何方式转换数据。我只是以430GB /小时的速度加载数据并进行了简单的设置:

我只是旋转了8个.NET线程,并使用SqlBulkCopy以10米行批量生成流数据。每个线程都插入到自己的堆表中。这是最简单的设置。这是在我的4 * 2 Core i7桌面上使用SQL Server在同一台机器上运行的。 SQL有大约50%的CPU使用率,我的应用程序有另外50%。因此,通过使用两台机器和一个快速网络,吞吐量可以轻松增加一倍。

这允许您将最终数据直接插入目标表(理想情况下是分区,以便您可以加载到单独的分区中)。