[英]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.