3.3 Bulk Insert任务

3.3  Bulk Insert任务

Bulk Insert任务允许按照BULK INSERT语句或bcp.exe命令行工具的相同方式将来自某个文本文件(也称为平面文件)的数据插入到SQL Server中。该任务只位于控制流中,而且不生成数据流。该任务的一个缺点是它不允许对中途的数据进行任何转换。不过这样做的好处是,可以最快速地以大批量方式将海量数据加载到SQL Server中。

当创建一个Bulk Insert任务并开始配置它时,将打开Bulk Insert Task Editor(如图3-2所示)。在大多数任务中,General页面允许对任务进行命名和描述。用户应当确保使用能够恰当描述任务工作性质的名字来命名,例如“Prepare Staging(准备中间阶段)”。这样做可以在以后部署程序包以及对问题进行故障诊断时提供帮助。

图  3-2

在图3-2中所示的最重要页面为Connection页面。该页面允许指定数据的源和目的地。从Destination Connection组中的Connection下拉框中选择目的地,接下来,从目的地连接下面的下一个下拉框指定一个目的地表。在指定连接时,同时也需要在File下拉框中指定源连接的文件名。源连接和目的地连接都使用Connection Manager。如果未创建共享连接,则需要从源或目的地连接下拉框中通过选择<New Connection…>来创建一个新连接。

在指定连接后,可以设置要导入的文件类型以及如何定界。你可以选择Use File或从格式下拉框来指定。如果选择Use File,则必须选择一种Bulk Insert格式文件,它将告诉任务如何对文件格式化(文本和行分隔符)。一般而言,用户希望通过从Format下拉框中选择Specify来指定某种文件格式。Specify选项可以使用户指定使用什么作为分隔符。在大多数情况下,默认的分隔符选项很适合指定文件格式。用户可能需要定期修改的是列分隔符,它告诉任务使用什么字符来分隔每一列。在此模式是使用制表符来分隔,但是另外一种很常用的方式是使用逗号来作为分隔符。

由于在使用Bulk Insert任务时操作过程在SQL Server上进行的,因此格式文件必须位于SQL Server上。如果源或格式文件不在执行任务的服务器上,则用户还可以使用UNC路径(//MachineName/ShareName/FileName.csv)。

在Bulk Insert Task Editor的Options页面,可以使用一些较少知晓的选项。在此可以指定针对源文件的代码页。通常用户不会希望修改来自RAW(这是默认值)的代码页。DataFileType选项可以指定源文件的文件类型。其中的选项包括Char、native、widechar和widenative。一般来说,用户接收到的文件为默认的char选项,但是在一些情况下,可能看到具有native格式的文件(如果文件是从SQL Server的实例通过使用带-n(native)开关项的bcp.exe程序所创建的,将会遇到这种情况)。

在Options页面中,如果希望只对行进行一次采样或者是希望跳过页首行,则还可以指定要复制的第一行和最后一行。BatchSize选项显示了在确认批处理之前有多少记录将写入到SQL Server中。如果将BatchSize设置为0(默认值),则此意味着所有的记录都将在单个批处理过程中写入到SQL Server。如果具有100 000以上的记录,则可能希望将该设置调整到5 000或按自己的需要来调整。具体的调整可能会因文件的宽度而异。

Options下拉框中包含五个可以启用和关闭的选项:

●       Check Constraints(检查约束):该选项在进行记录之前对表和列约束进行检查。在默认情况下,只有该选项是启用的。

●       Keep Nulls(保持空):通过选择该选项,Bulk Insert任务将使用SQL Server中的Null替换源文件中的空白列。

●       Enable Identity Insert(启用标识插入):如果用户的目的地表具有一个所插入的标识列,则启用该选项。否则,将接收到错误。

●       Table Lock(表锁定):该选项在目标表上创建一个SQL Server锁,除了你自己插入的记录之外,锁定可以避免表中其他的内容被插入和更新。该选项可以加速处理过程,但是可能会导致生产停顿,因为其他人将被阻止修改表。如果选中该选项,则SSIS将不需要竞争锁定来将大量数据插入到目标表中。用户应当仅在确定没有其他的进程与自己的任务竞争表访问权时才设置该选项。

●       Fire Triggers(引发触发器):在默认情况下,Bulk Insert任务将忽略触发器。通过选中该选项,任务将不再忽略触发器并将针对用户所插入的表引发插入触发器。

在Options页面中还可以设置其他一些选项。SortedData选项指定了在插入数据时希望进行排序的列。该选项默认为无,意味着false。通常不需要设置该选项,但是如果需要设置的话,则可以输入希望进行排序的列。MaxErrors选项指定了任务在因为错误而停止执行之前所能允许接受的错误数。在默认情况下,未插入的每一行被认为是一个错误,如果单个行具有问题,则整个任务将执行失败。

Bulk Insert任务不记录导致错误的行。如果用户希望错误记录写入到某个错误文件或表,则最好使用Data Flow任务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值