none
Trigger de Log

    Pergunta

  • Bom dia!

    Tenho uma trigger de Log que deve armazenar a query que foi executada (update vendas_produtos...). Existe alguma função para isso?

    terça-feira, 13 de março de 2018 12:51

Respostas

  • Juvia,

    Você deseja obter informações sobre as querys que foram sendo executadas? Se for isso veja se este exemplo te ajuda:

    -- Exemplo 1 --
    SELECT  DMQS.last_execution_time AS [Executed At] ,
                  DMST.text AS [Query]
    FROM  sys.dm_exec_query_stats AS DMQS CROSS APPLY sys.dm_exec_sql_text(DMQS.sql_handle) AS DMST
    ORDER BY DMQS.last_execution_time DESC; 
    Go
    
    -- Exemplo 2 --
    SELECT  DEC.client_net_address AS 'IP do cliente' ,
                  sp.hostname AS 'HostName' ,
                  DMET.text AS 'Query or Command' ,
                  DB_NAME(sp.dbid) AS 'Database' ,
                  sp.[program_name] AS 'Software or application'
    FROM  sys.dm_exec_connections DEC
            INNER JOIN sys.sysprocesses sp ON DEC.session_id = sp.spid
            CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle) AS DMET;
    Go

    Este outro exemplo apresenta as querys em execução:

    SELECT 
      DES.SESSION_ID,
      DES.CPU_TIME,
      DES.READS,
      DES.WRITES,
      DES.LOGICAL_READS,
      DES.ROW_COUNT,
      DER.SESSION_ID,
      DES.STATUS,
      DES.HOST_NAME,
      DES.PROGRAM_NAME,
      DES.LOGIN_NAME,
      DES.ORIGINAL_LOGIN_NAME, 
      DEC.CLIENT_NET_ADDRESS,
      DEC.AUTH_SCHEME,
      DEC.NET_TRANSPORT,
      SUBSTRING(T.[TEXT], DER.[STATEMENT_START_OFFSET] / 2, 
    	COALESCE(NULLIF(DER.[STATEMENT_END_OFFSET], - 1) / 2, 2147483647)) AS COMANDO
    FROM
     SYS.DM_EXEC_SESSIONS AS DES 
      INNER JOIN SYS.DM_EXEC_REQUESTS DER
       ON DER.BLOCKING_SESSION_ID = DES.SESSION_ID
      INNER JOIN SYS.DM_EXEC_CONNECTIONS DEC  
       ON DEC.SESSION_ID = DES.SESSION_ID
      INNER JOIN SYS.DM_EXEC_REQUESTS DER2
       ON DER2.SESSION_ID = DES.SESSION_ID
       CROSS APPLY SYS.DM_EXEC_SQL_TEXT(DER.[SQL_HANDLE]) AS T
    GO

    Agora eu pensaria e analisaria bem se este tipo de implementação seria interessante ser utilizado em um trigger.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Filipe B Castro quinta-feira, 29 de março de 2018 21:00
    quinta-feira, 15 de março de 2018 12:29

Todas as Respostas

  • Faça algo semelhante a isso , dentro do sua trigger , não tenho certeza absoluta, vale colocar em um ambiente de teste.

    SELECT  DEST.text as Comando, S.* FROM  sys.sysprocesses AS S
    CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS DEST
    WHERE S.spid =@@SPID
    AND S.dbid  = DB_ID()

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    terça-feira, 13 de março de 2018 17:03
  • Se você quer armazenar queries executadas, deixe um trace ativo e armazene o resultado numa tabela.
    terça-feira, 13 de março de 2018 20:13
  • Se você quer armazenar queries executadas, deixe um trace ativo e armazene o resultado numa tabela.

    J.Souza,

    Pode ser uma solução, mas é a menos trivial e mais impactante, ainda mais quando se referimos ao custo de processamento que um trace poderá exigir.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 15 de março de 2018 12:26
  • Juvia,

    Você deseja obter informações sobre as querys que foram sendo executadas? Se for isso veja se este exemplo te ajuda:

    -- Exemplo 1 --
    SELECT  DMQS.last_execution_time AS [Executed At] ,
                  DMST.text AS [Query]
    FROM  sys.dm_exec_query_stats AS DMQS CROSS APPLY sys.dm_exec_sql_text(DMQS.sql_handle) AS DMST
    ORDER BY DMQS.last_execution_time DESC; 
    Go
    
    -- Exemplo 2 --
    SELECT  DEC.client_net_address AS 'IP do cliente' ,
                  sp.hostname AS 'HostName' ,
                  DMET.text AS 'Query or Command' ,
                  DB_NAME(sp.dbid) AS 'Database' ,
                  sp.[program_name] AS 'Software or application'
    FROM  sys.dm_exec_connections DEC
            INNER JOIN sys.sysprocesses sp ON DEC.session_id = sp.spid
            CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle) AS DMET;
    Go

    Este outro exemplo apresenta as querys em execução:

    SELECT 
      DES.SESSION_ID,
      DES.CPU_TIME,
      DES.READS,
      DES.WRITES,
      DES.LOGICAL_READS,
      DES.ROW_COUNT,
      DER.SESSION_ID,
      DES.STATUS,
      DES.HOST_NAME,
      DES.PROGRAM_NAME,
      DES.LOGIN_NAME,
      DES.ORIGINAL_LOGIN_NAME, 
      DEC.CLIENT_NET_ADDRESS,
      DEC.AUTH_SCHEME,
      DEC.NET_TRANSPORT,
      SUBSTRING(T.[TEXT], DER.[STATEMENT_START_OFFSET] / 2, 
    	COALESCE(NULLIF(DER.[STATEMENT_END_OFFSET], - 1) / 2, 2147483647)) AS COMANDO
    FROM
     SYS.DM_EXEC_SESSIONS AS DES 
      INNER JOIN SYS.DM_EXEC_REQUESTS DER
       ON DER.BLOCKING_SESSION_ID = DES.SESSION_ID
      INNER JOIN SYS.DM_EXEC_CONNECTIONS DEC  
       ON DEC.SESSION_ID = DES.SESSION_ID
      INNER JOIN SYS.DM_EXEC_REQUESTS DER2
       ON DER2.SESSION_ID = DES.SESSION_ID
       CROSS APPLY SYS.DM_EXEC_SQL_TEXT(DER.[SQL_HANDLE]) AS T
    GO

    Agora eu pensaria e analisaria bem se este tipo de implementação seria interessante ser utilizado em um trigger.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Filipe B Castro quinta-feira, 29 de março de 2018 21:00
    quinta-feira, 15 de março de 2018 12:29