怎样执行SQL Server集成服务(SSIS)中的批处理
2008-10-08 10:08:20 来源:WEB开发网注意,这个存储过程只获取Processed字段等于0的记录。
Execute SQL任务的一般属性设置如下所示:
Execute SQL任务的参数匹配属性设置如下所示:
在上面的设置中,设置了SQLStatement来执行这个存储过程,对所要求的参数使用占位符。SSIS包变量按照这个存储过程中参数的序列号匹配到这些参数。
Compute Aggregation(计算聚合)
Compute Aggregation是一个Execute SQL任务,它重新计算销售历史概要表中的概要数据用于要进行的订单年和订单月份批处理。销售历史概要表和存储过程如下所示:
CREATETABLEdbo.SalesHistorySummary(
OrderYearintnotnull,
OrderMonthintnotnull,
ProductIDintnotnull,
OrderQtysmallintnotnull,
LineTotalmoneynotnull
)
CREATEPROCEDUREdbo.stp_CalcSalesHistorySummary
@OrderYearint
,@OrderMonthint
AS
BEGIN
SETNOCOUNTON;
DELETEFROMdbo.SalesHistorySummary
WHEREOrderYear=@OrderYear
ANDOrderMonth=@OrderMonth;
INSERTINTOdbo.SalesHistorySummary(
OrderYear
,OrderMonth
,ProductID
,OrderQty
,LineTotal
)
SELECT
OrderYear
,OrderMonth
,ProductID
,SUM(OrderQty)
,SUM(LineTotal)
FROMdbo.SalesHistory
WHEREOrderYear=@OrderYear
ANDOrderMonth=@OrderMonth
GROUPBY
OrderYear
,OrderMonth
,ProductID
END
GO
上面的存储过程首先删除概要表中要被处理的订单年和月份的所有记录,然后执行聚合和插入。Execute SQL任务属性设置和Append Batch to Sales History中的一样,除了要执行的存储过程的名称;我们跳过显示这个截屏。
Mark Batch as Processed(将批处理标记为处理过的)
Mark Batch as Processed是一个Execute SQL任务,它更新源表中在当前批处理中处理过的记录的Processed字段。它调用下面的存储过程:
CREATEPROCEDUREdbo.stp_MarkOrdersProcessed
@OrderYearint
,@OrderMonthint
AS
BEGIN
SETNOCOUNTON;
UPDATEdbo.imp_SalesOrderHeader
SETProcessed=1
WHEREDATEPART(YYYY,OrderDate)=@OrderYear
ANDDATEPART(MONTH,OrderDate)=@OrderMonth;
END
GO
Execute SQL任务属性设置也和之前的一样,除了存储过程的名称;我们跳过显示这个截屏。
总结
现在,我们强调一下执行批处理的示例SSIS包中的重点:
将源数据分组到批处理中;使用Execute SQL任务并创建一个完全结果集,它在一个包变量中保存这个结果集。
使用一个Foreach Loop容器迭代结果集。
使用一个序列容器来定义一个事务并在序列容器中添加合适的任务。
这个包设置支持在开始时发生任何错误时重启这个包;序列容器在成功后提交所有工作,如果发生任何错误就回滚。源数据处理过后会进行标记,所以如果这个包重启,这个数据也不会再次处理。
更多精彩
赞助商链接