none
Fazer uma TRIGGER virar um JOB RRS feed

  • Pergunta

  • Olá, estou com a seguinte situação, preciso transformar a seguinte trigger em um Job, porém meu SQL Agent não está ativo e mesmo eu iniciando o serviço do Agent, ele não aparece para mim no meu sql(versão 2017). Existe algum script que eu possa utilizar para transformar a trigger abaixo em um job, ou seja, criar o Job manualmente?

    Minha TRIGGER:

    USE [GrowMonitor_BP]
    GO
    /****** Object:  Trigger [dbo].[ATUALIZA_TB_HISTORICO]    Script Date: 06/01/2020 14:38:22 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    ALTER TRIGGER [dbo].[ATUALIZA_TB_HISTORICO]
    ON [dbo].[TB_HISTORICO_WORKFLOW]
    AFTER INSERT
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    IF OBJECT_ID('TEMPDB..#TEMP') IS NOT NULL DROP TABLE #TEMP
    IF OBJECT_ID('TEMPDB..#AGENTES') IS NOT NULL DROP TABLE #AGENTES
    SELECT * INTO #AGENTES FROM (

    SELECT
    D.*,
    CASE
    --WHEN D.AgentName IS NULL THEN (SELECT DISTINCT TOP 1 Z.AgentName FROM [BDRPA].[dbo].[instances] Z WHERE Z.TransactionID = D.TransactionID AND Z.AgentName != '' AND Z.AgentName IS NOT NULL)
    --WHEN D.AgentName = '' THEN (SELECT DISTINCT TOP 1 C.AgentName FROM [BDRPA].[dbo].[instances] C WHERE C.TransactionID = D.TransactionID AND C.AgentName != '' AND C.AgentName IS NOT NULL)
    WHEN D.AgentName IS NULL THEN (SELECT DISTINCT TOP 1 Z.AgentName FROM [AutomateEnterprise].[dbo].[instances] (NOLOCK) Z WHERE Z.WorkflowInstanceID = D.WorkflowInstanceID AND Z.AgentName != '' AND Z.AgentName IS NOT NULL)
    WHEN D.AgentName = '' THEN (SELECT DISTINCT TOP 1 C.AgentName FROM [AutomateEnterprise].[dbo].[instances] (NOLOCK) C WHERE C.WorkflowInstanceID = D.WorkflowInstanceID AND C.AgentName != '' AND C.AgentName IS NOT NULL)
    ELSE D.AgentName
    END Agente
    FROM
    (
    SELECT P.AgentID, P.AgentName, P.StartDateTime, P.EndDateTime, P.TransactionID, P.WorkflowInstanceID, P.ResultCode, P.Status, P.ConstructID, CAST(P.ResultText AS NVARCHAR(max)) AS ResultText
    FROM
    (
    SELECT T1.AgentID, T1.AgentName, T1.StartDateTime, T1.EndDateTime, T1.ResultCode, T1.Status, T1.TransactionID ,T1.WorkflowInstanceID, T1.ConstructID, T1.ResultText
    FROM [AutomateEnterprise].[dbo].[instances] (NOLOCK) T1 WHERE T1.EndDateTime > DateAdd(DD,-3,GETDATE() )
    UNION ALL
    SELECT T2.AgentID, NULL, T2.StartDateTime, T2.EndDateTime, T2.ResultCode, NULL, T2.TransactionID, T2.WorkflowInstanceID, T2.ConstructID, T2.ResultText
    FROM [AutomateEnterprise].[dbo].[executionevents] (NOLOCK) T2 WHERE T2.EndDateTime > DateAdd(DD,-3,GETDATE() )
    )
    AS P
    WHERE P.AgentID IN (SELECT DISTINCT TB0.AgentID FROM [AutomateEnterprise].[dbo].[instances] (NOLOCK) TB0)
    GROUP BY P.AgentID, P.AgentName, P.StartDateTime, P.EndDateTime, P.TransactionID, P.WorkflowInstanceID, P.ResultCode, P.Status, P.ConstructID, CAST(P.ResultText AS NVARCHAR(MAX))

    ) AS D

    ) TBL_TMP
    /* Selecionar ultima linha de cada agente */
    SELECT ID = IDENTITY(int,1,1), TABELA_TEMP.* INTO #TEMP FROM (
    SELECT ResourceID AS ID_AGENTE, Agente AS AGENTES, WorkflowInstanceID, ConstructID, TransactionID, StartDateTime, EndDateTime, ResultText, ResultCode
    FROM (SELECT A.Agente,
    AG.ResourceID,
    A.WorkflowInstanceID,
    A.ConstructID,
    A.TransactionID,
    A.AgentID,
    A.StartDateTime,
    A.EndDateTime,
    A.ResultText,
    A.ResultCode,
    Row_number() OVER(PARTITION BY Agente ORDER BY EndDateTime DESC ) RN
    FROM #AGENTES (NOLOCK) A
    INNER JOIN [AutomateEnterprise].[dbo].[automateconstructs] (NOLOCK) AG ON A.Agente = AG.ResourceName
    ) t
    WHERE RN = 1 ) AS TABELA_TEMP

    /*Iniciar transação para incluir (INSERT)
    ou alterar (UPDATE) os valores no banco */

    BEGIN TRAN
    /* Aqui ocorre a verificação do agente, workflow e tarefa */
    IF NOT EXISTS
    (
    SELECT *
    FROM GrowMonitor_BP.[dbo].TB_HISTORICO_WORKFLOW (NOLOCK) TB
    WHERE
    TB.IDWORKFLOW =
    (
    SELECT TOP 1 U.ConstructID /* ConstructID é o IDWORFLOW */
    FROM #AGENTES (NOLOCK) U
    WHERE U.TransactionID = (SELECT TOP 1 T.TransactionID FROM #TEMP (NOLOCK) T WHERE T.EndDateTime = (SELECT MAX(A.EndDateTime) FROM #TEMP (NOLOCK) A))
    AND U.ConstructID != ''
    AND U.ResultText LIKE '%workflow%'
    AND U.ResultText NOT LIKE '%Administrator%'
    -- AND U.ResultText NOT LIKE '%Task%'
    ORDER BY U.EndDateTime DESC
    )
    AND TB.FLAG IN (2) /* Aguardando, Em Execução*/
    AND TB.AGENTE_NAME =
    (
    SELECT TOP 1 U.Agente
    FROM #AGENTES U
    WHERE U.TransactionID = (SELECT TOP 1 T.TransactionID FROM #TEMP T WHERE T.EndDateTime = (SELECT MAX(A.EndDateTime) FROM #TEMP A))
    AND U.ConstructID != ''
    AND U.ResultText LIKE '%workflow%'
    ORDER BY U.EndDateTime DESC
    )
    AND TB.IDWORKFLOW = (
    SELECT TOP 1 TX.IDWORKFLOW
    FROM GrowMonitor_BP.[dbo].TB_HISTORICO_WORKFLOW (NOLOCK) TX
    INNER JOIN #AGENTES U ON U.ConstructID = TX.IDWORKFLOW
    WHERE TB.IDWORKFLOW = TX.IDWORKFLOW
    AND TB.AGENTE_NAME = TX.AGENTE_NAME
    )
    AND TB.DTHR_INICIO = (
    SELECT TOP 1 TG.DTHR_INICIO
    FROM GrowMonitor_BP.[dbo].TB_HISTORICO_WORKFLOW (NOLOCK) TG
    WHERE TG.DTHR_INICIO = TB.DTHR_INICIO
    AND (TG.FLAG = 1 OR TG.FLAG = 2 OR TG.FLAG = 3)
    )
    )
    BEGIN
    --PRINT 'EXECUTANDO INSERT'
    INSERT INTO GrowMonitor_BP.[dbo].TB_HISTORICO_WORKFLOW
    (IDWORKFLOW, FLAG, DTHR_INICIO, DTHR_FIM, OBS, AGENTE_NAME, DIRETORIO, TRANSACTIONID)
    SELECT TOP 1 U.ConstructID,
    CASE
    WHEN U.ResultCode = 12 /* Running */
    THEN 2 /* Em Execução */

    WHEN U.ResultCode = 11 /* Queued */
    THEN 3 /* Erro de Execução - Informar na observação para iniciar em outro agente*/

    WHEN U.ResultCode = 10 /* unknow status */
    THEN 4 /* Em Observação */

    WHEN U.ResultCode = 9 /* paused */
    THEN 0 /* Aguardando Execução */

    WHEN U.ResultCode = 8 /* halted breakpoint */
    THEN 4 /* Em Observação */

    WHEN U.ResultCode = 4/* stopped */
    THEN 3 /* Erro de Execução */

    WHEN U.ResultCode = 2 /* failed */
    THEN 3 /* Erro de Execução */

    WHEN (U.ResultCode = 1 AND U.ResultText LIKE '%manually%') /* manually */
    THEN 2 /* Em execução */

    WHEN (U.ResultCode = 1 AND U.ResultText NOT LIKE '%manually%') /* manually */
    THEN 2 /* Em execução */

    WHEN U.ResultCode = 0 /* stopped */
    THEN 3 /* Erro de Execução */

    ELSE U.ResultCode
    END,
    CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, U.StartDateTime), DATENAME(TzOffset, SYSDATETIMEOFFSET())))StartDateTime,
    --CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, U.EndDateTime), DATENAME(TzOffset, SYSDATETIMEOFFSET())))EndDateTime,
    '',
    CASE
    WHEN (U.ResultCode = 12) /* Running */
    THEN 'Em execução - 1.' /* Em Execução */

    WHEN (U.ResultCode = 11) /* Queued */
    THEN 'Iniciar em outro agente.' /* Erro de Execução - Informar na observação para iniciar em outro agente*/

    WHEN (U.ResultCode = 10) /* unknow status */
    THEN 'Status desconhecido.' /* Em Observação */

    WHEN (U.ResultCode = 9) /* paused */
    THEN 'Aguardando execução.' /* Aguardando Execução */

    WHEN (U.ResultCode = 8) /* halted breakpoint */
    THEN 'Breakpoint encontrado.' /* Em Observação */

    WHEN (U.ResultCode = 4) /* stopped */
    THEN 'Parado manualmente.' /* Erro de Execução */

    WHEN (U.ResultCode = 1 AND U.ResultText LIKE '%manually%') /* manually */
    THEN 'Em execução - 2.' /* Em execução */

    WHEN (U.ResultCode = 1 AND U.ResultText NOT LIKE '%manually%' AND U.TransactionID = (SELECT TOP 1 A.TransactionID FROM executionevents (NOLOCK) A WHERE A.TransactionID = U.TransactionID AND A.ResultText LIKE '%Task%' AND A.ResultText LIKE '%failed%' AND A.ResultText LIKE '%Erro%' AND A.ResultCode = 2))
    THEN 'Erro de execução 1.' /* Erro de execução*/

    WHEN (U.ResultCode = 2) /* failed */
    THEN 'Erro de execução - 2.' /* Erro de Execução */

    WHEN (U.ResultCode = 1 AND U.ResultText NOT LIKE '%manually%' AND U.TransactionID != (SELECT TOP 1 A.TransactionID FROM executionevents (NOLOCK) A WHERE A.TransactionID = U.TransactionID AND A.ResultText LIKE '%Task%' AND A.ResultText LIKE '%failed%' AND A.ResultCode = 2))
    THEN 'Executado com sucesso - 1.' /* Sucesso */

    WHEN (U.ResultCode = 1) /* sucesso */
    THEN 'Executado com sucesso - 2.' /* Executado com sucesso */

    WHEN (U.ResultCode = 0) /* stopped */
    THEN 'Erro de execução - 3.' /* Erro de Execução */

    ELSE CONVERT(VARCHAR, U.ResultCode)
    END OBS,
    U.Agente, (SELECT REPLACE ((SELECT TOP 1 CAST(CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, U.StartDateTime), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS TIME(0))), ':', '')),
    U.TransactionID
    FROM #AGENTES (NOLOCK) U
    WHERE U.TransactionID = (SELECT TOP 1 T.TransactionID FROM #TEMP T WHERE T.EndDateTime = (SELECT MAX(A.EndDateTime) FROM #TEMP A) AND T.ResultCode = 12)
    --AND U.ConstructID != ''
    AND U.ResultText LIKE '%Workflow%'
    AND U.ResultText LIKE '%running%'
    AND U.ResultCode = 12
    ORDER BY U.EndDateTime DESC

    END
    ELSE
    BEGIN
    --PRINT 'EXECUTANDO UPDATE'
    UPDATE H
    SET
    H.FLAG =
    (
    CASE
    WHEN T.ResultCode = 12 /* Running */
    THEN '2' /* Em Execução */

    WHEN (T.ResultText LIKE '%running%')
    THEN '2' /* Em execução */

    WHEN (T.ResultText LIKE '%Evaluation finished%')
    THEN '2' /* Em execução */

    WHEN (T.ResultCode = 1 AND T.ResultText LIKE '%manually%') /* manually */
    THEN '2' /* Em execução */

    WHEN T.ResultCode = 11 /* Queued */
    THEN '3' /* Erro de Execução - Informar na observação para iniciar em outro agente*/

    WHEN T.ResultCode = 10 /* unknow status */
    THEN '4' /* Em Observação */

    WHEN T.ResultCode = 9 /* paused */
    THEN '0' /* Aguardando Execução */

    WHEN T.ResultCode = 8 /* halted breakpoint */
    THEN '4' /* Em Observação */

    WHEN T.ResultCode = 4/* stopped */
    THEN '3' /* Erro de Execução */

    WHEN T.ResultCode = 2 /* failed */
    THEN '3' /* Erro de Execução */


    WHEN (T.ResultCode = 1 AND T.ResultText NOT LIKE '%manually%' AND T.ResultText NOT LIKE '%Evaluation%' AND T.ResultText NOT LIKE '%running%' AND T.TransactionID != (SELECT TOP 1 A.TransactionID FROM executionevents (NOLOCK) A WHERE A.TransactionID = T.TransactionID AND A.ResultText LIKE '%Task%' AND A.ResultText LIKE '%failed%' AND A.ResultCode = 2))
    THEN '1' /* Sucesso */

    WHEN (T.ResultCode = 1 AND T.ResultText NOT LIKE '%manually%' AND T.TransactionID = (SELECT TOP 1 A.TransactionID FROM executionevents (NOLOCK) A WHERE A.TransactionID = T.TransactionID AND A.ResultText LIKE '%Task%' AND A.ResultText LIKE '%failed%' AND A.ResultText LIKE '%Erro%' AND A.ResultCode = 2))
    THEN '3' /* Erro de execução*/

    WHEN T.ResultCode = 0 /* stopped */
    THEN '3' /* Erro de Execução */

    ELSE T.ResultCode
    END
    ),
    --H.DTHR_INICIO = T.StartDateTime,
    H.DTHR_FIM = CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, T.EndDateTime), DATENAME(TzOffset, SYSDATETIMEOFFSET()))),
    H.OBS =
    CASE
    WHEN (T.ResultCode = 12) /* Running */
    THEN 'Em execução 1.' /* Em Execução */

    WHEN (T.ResultCode = 1 AND T.ResultText LIKE '%manually%') /* manually */
    THEN 'Em execução 2.' /* Em execução */

    WHEN (T.ResultCode = 11) /* Queued */
    THEN 'Iniciar em outro agente.' /* Erro de Execução - Informar na observação para iniciar em outro agente*/

    WHEN (T.ResultCode = 10) /* unknow status */
    THEN 'Status desconhecido.' /* Em Observação */

    WHEN (T.ResultCode = 9) /* paused */
    THEN 'Aguardando execução.' /* Aguardando Execução */

    WHEN (T.ResultCode = 8) /* halted breakpoint */
    THEN 'Breakpoint encontrado.' /* Em Observação */

    WHEN (T.ResultCode = 4) /* stopped */
    THEN 'Parado manualmente.' /* Erro de Execução */

    WHEN (T.ResultCode = 2) /* failed */
    THEN 'Erro de execução 1.' /* Erro de Execução */

    WHEN (T.ResultCode = 1 AND T.ResultText NOT LIKE '%manually%' AND T.TransactionID != (SELECT TOP 1 A.TransactionID FROM [AutomateEnterprise].[dbo].executionevents (NOLOCK) A WHERE A.TransactionID = T.TransactionID AND A.ResultText LIKE '%Task%' AND A.ResultText LIKE '%failed%' AND A.ResultCode = 2))
    THEN 'Executado com sucesso.' /* Sucesso */

    WHEN (T.ResultCode = 1 AND T.ResultText NOT LIKE '%manually%' AND T.TransactionID = (SELECT TOP 1 A.TransactionID FROM [AutomateEnterprise].[dbo].executionevents (NOLOCK) A WHERE A.TransactionID = T.TransactionID AND A.ResultText LIKE '%Task%' AND A.ResultText LIKE '%failed%' AND A.ResultText LIKE '%Erro%' AND A.ResultCode = 2))
    THEN 'Erro de execução 2.' /* Erro de execução*/

    WHEN (T.ResultCode = 1 AND T.ResultText NOT LIKE '%manually%' AND T.ResultText NOT LIKE '%running%' AND T.TransactionID = (SELECT TransactionID FROM (SELECT A.TransactionID, A.ResultText, Row_number() OVER(PARTITION BY A.TransactionID ORDER BY A.EndDateTime DESC) RN FROM [AutomateEnterprise].[dbo].executionevents (NOLOCK) A WHERE A.TransactionID = T.TransactionID) as t WHERE t.RN = 2 AND t.ResultText LIKE '%failed%'))
    THEN 'Erro de execução 3.' /* Erro de execução*/

    WHEN (T.ResultCode = 1) /* sucesso */
    THEN 'Executado com sucesso.' /* Executado com sucesso */

    WHEN (T.ResultCode = 0) /* stopped */
    THEN 'Erro de execução 4.' /* Erro de Execução */

    ELSE CONVERT(VARCHAR, T.ResultCode)
    END,
    H.DIRETORIO = (SELECT REPLACE ((SELECT TOP 1 CAST(CONVERT(datetime, SWITCHOFFSET(CONVERT(datetimeoffset, T.EndDateTime), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS TIME(0))), ':', ''))
    FROM
    GrowMonitor_BP.[dbo].TB_HISTORICO_WORKFLOW (NOLOCK) H
    INNER JOIN #TEMP T
    ON T.ConstructID = H.IDWORKFLOW
    AND T.TransactionID = H.TRANSACTIONID
    AND T.AGENTES = H.AGENTE_NAME
    AND H.FLAG != 1
    AND H.FLAG != 3
    WHERE
    H.FLAG != 1
    AND H.FLAG != 3
    END
    COMMIT TRAN
    END

    IF OBJECT_ID('TEMPDB..#TEMP') IS NOT NULL DROP TABLE #TEMP
    IF OBJECT_ID('TEMPDB..#AGENTES') IS NOT NULL DROP TABLE #AGENTES

    segunda-feira, 6 de janeiro de 2020 17:39

Respostas

Todas as Respostas