簡體   English   中英

當表已滿時運行 SSIS 包

[英]Run SSIS package runs when a table it full

我有以下過程:

  1. 一個外部進程填充一個名為: staging_table的臨時表。
  2. 觸發 SSIS 包的東西
  3. SSIS 包執行業務邏輯並截斷staging_table
  4. 然后該過程再次開始。

外部進程不會在特定時間執行,因此創建作業以在特定時間運行不是解決方案。 我希望在表格填滿時執行包。 填表時是否可以執行 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異步處理。

更多信息: 高級服務代理示例:Eitan Blumin 的異步觸發器

有很多方法可以實現這一點。 這是我實施過幾次的一種方式。

這取決於在 SSIS 包末尾截斷的表。

Execute SQL Task添加到您的 SSIS 包,以對您的表執行行計數。 將該計數返回到 SSIS 變量。 Execute SQL TaskPrecedent Constraint檢查變量的值,如果計數大於零,則僅繼續執行包邏輯的其余部分。 否則,停在那里。

然后只需安排作業盡可能頻繁地運行。 如果表每天都被填充,則可能每隔幾個小時運行一次作業。 如果每小時填充一次,則可能每隔幾分鍾運行一次作業。

在空表上計算記錄的開銷很小,因此多余的運行不會對您的環境產生負面影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM