[英]Run SSIS package runs when a table it full
我有以下過程:
staging_table
的臨時表。staging_table
。外部進程不會在特定時間執行,因此創建作業以在特定時間運行不是解決方案。 我希望在表格填滿時執行包。 填表時是否可以執行 SSIS 包? 如果可能,那將如何工作以及需要做什么? 僅供參考,此版本的 SQL Server 是 2008 R2。
“我希望在表格填滿時執行包”
這有點含糊,但您可以在AFTER INSERT TRIGGER
創建:
create trigger staging_table_trigger
on staging_table after insert as
begin
Declare @execution_id bigint;
EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Package.dtsx',
@execution_id=@execution_id OUTPUT,
@folder_name=N'Deployed Projects',
@project_name=N'Integration Services Project1',
@use32bitruntime=False,
@reference_id=Null;
--params if any
DECLARE @var0 smallint = 1
EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id,
@object_type=50,
@parameter_name=N'LOGGING_LEVEL',
@parameter_value=@var0;
-- run package
EXEC [SSISDB].[catalog].[start_execution] @execution_id;
end
使用 Transact-SQL 從 SSMS 運行 SSIS 包
請注意,此機制不適用於高並發 OLTP 系統,在這種情況下,您應該考慮使用SERVICE BROKER
異步處理。
有很多方法可以實現這一點。 這是我實施過幾次的一種方式。
這取決於在 SSIS 包末尾截斷的表。
將Execute SQL Task
添加到您的 SSIS 包,以對您的表執行行計數。 將該計數返回到 SSIS 變量。 讓Execute SQL Task
的Precedent Constraint
檢查變量的值,如果計數大於零,則僅繼續執行包邏輯的其余部分。 否則,停在那里。
然后只需安排作業盡可能頻繁地運行。 如果表每天都被填充,則可能每隔幾個小時運行一次作業。 如果每小時填充一次,則可能每隔幾分鍾運行一次作業。
在空表上計算記錄的開銷很小,因此多余的運行不會對您的環境產生負面影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.