簡體   English   中英

在其執行的存儲過程中查找執行SQL任務組件ID

[英]Find Execute SQL task component ID in its executing stored procedure

我有一個日志存儲過程,最初設計沒有與SSIS包系統變量相關的輸入參數。 現在我想用它來獲取它的組件ID,如果通過包執行(即它執行的SQL任務組件GUID)。

由於存儲過程幾乎在整個項目的任何地方使用(甚至在MSBI范圍之外),既不更改存儲過程參數設置,也不做任何硬代碼映射關系,也不將所有執行SQL任務轉移到腳本任務並使用Dts.Events.Fireinformation聽起來很容易

但是,SSIS內置日志記錄功能已在項目中很好地啟用。 我怎樣才能做到這一點?

(參考:使存儲過程RAISERROR('message', 10, 1) ONINFORMATION RAISERROR('message', 10, 1)PRINT 1不會在包中觸發ONINFORMATION事件,因此不能使用dbo.sysssislog來執行此操作)。

以下解決方案假定執行sql任務不是異步執行的,並且在任務名稱中有一個“execute sql”字符串。 我還在目錄中運行包時使用默認的“ISServerExec”應用程序名稱,您應該在連接字符串中將應用程序名稱設置為項目的特定值,然后使用它。 這些是很多假設,但是你設置的場景太開放了。

做出上述所有假設,您可以在sp中使用此代碼:

DECLARE @taskId AS UNIQUEIDENTIFIER;

WITH hostProcess AS (

    SELECT host_process_id as id FROM SYS.dm_exec_sessions 
    WHERE program_name = 'ISServerExec' --set an specific application name here 
    AND session_id = @@SPID

)

SELECT TOP 1 @taskId= m.message_source_id
FROM SSISDB.catalog.executions e 
INNER JOIN hostProcess ON e.process_id = hostProcess.id
INNER JOIN SSISDB.catalog.event_messages m ON e.execution_id = m.operation_id
where m.message_source_name like '%execute sql%' --identifying exec sql tasks 
AND m.message_type =30 and  m.message_source_type=40
order by m.message_time DESC

IF @taskId is not null 
    BEGIN
    --do your stuff here
    END

您要完成的任務我建議僅使用SSIS日志記錄功能。

暫無
暫無

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

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