Ir para conteúdo
Fórum Script Brasil

Oliveira.

Membros
  • Total de itens

    6
  • Registro em

  • Última visita

Posts postados por Oliveira.

  1. Bom dia a todos e desde já muito obrigado por sua atenção.

    Estou precisando que as alterações efetuadas na estrutura da tabela TBFUNC sejam replicadas na tabela LOG_FUNC.

    Exemplo o DBA por algum motivo alterou na tabela TBFUNC o tamanho da coluna NOME de varchar(50) para varchar(100) a idéia do gatilho é que essa alteração seja replicada na tabela LOG_FUNC que possui uma coluna com o mesmo nome e tem que ter obrigatoriamente o mesmo tipo de dados e tamanho.

    Acredito que deva haver um meio de se fazer isso e na verdade criei este gatilho utilizando essas duas tabela como exemplo mas a ideia é que isso funcione para todas as tabelas de log que tenho no BD do sistema que estou desenvolvendo.

    Agradeço mais uma vez sua colaboração e conto com sua ajuda, grande abraço e obrigado.

    Segue abaixo o código do gatilho.

    Atenciosamente,

    Tadeu.

    CREATE TRIGGER LOG_ALT_TBFUNC ON DATABASE FOR ALTER_TABLE
    AS

    -- Variáveis Gerais
    DECLARE @V_COLID INT

    -- Variáveis da Tabela de Dados
    DECLARE @T_COLID VARCHAR(5)
    DECLARE @T_COLUNA VARCHAR(100)
    DECLARE @T_TIPO VARCHAR(100)
    DECLARE @T_TAMANHO VARCHAR(10)
    DECLARE @T_PREC VARCHAR(10)
    DECLARE @T_ISNULLABLE CHAR(1)

    -- Declarando Cursor
    DECLARE LINHA CURSOR FOR

    SELECT  col.colid
    , col.name AS Coluna  
    , tip.name AS Tipo  
    , col.length as Tamanho  
    , col.prec  
    , col.isnullable  
    FROM syscolumns col
    INNER JOIN sysobjects tab ON tab.id   = col.id  
    INNER JOIN systypes tip ON tip.xtype  = col.xtype  
    WHERE tab.xtype
    = 'U' 
    AND tab.name
    = 'TBFUNC' 
    ORDER BY col.id

    OPEN LINHA
    FETCH NEXT FROM LINHA INTO @T_COLID, @T_COLUNA, @T_TIPO, @T_TAMANHO, @T_PREC, @T_ISNULLABLE

    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @V_COLID = CAST(@T_COLID AS INTEGER) + 7 

    IF EXISTS(  
    SELECT  col.colid
    , col.name AS Coluna  
    FROM syscolumns col
    INNER JOIN sysobjects tab ON tab.id   = col.id  
    INNER JOIN systypes tip ON tip.xtype  = col.xtype  
    WHERE tab.xtype
    = 'U' 
    AND tab.name
    = 'LOG_TBFUNC'
    AND     col.id
    = LTRIM(RTRIM(CAST(@V_COLID AS VARCHAR(5))))

    BEGIN
    IF @T_TIPO IN ('CHAR', 'VARCHAR')
    BEGIN    --
          ALTER TABLE LOG_FUNC ALTER COLUMN @T_COLUNA @T_TIPO + '(' + @T_TAMANHO + ')'; -- SEI QUE A SINTAXE DO COMANDO ALTER NÃO ACEITA ISSO MAS...
    END 
    END  
    END
     

  2. Meus caros.

    Estou com o seguinte problema.

    Em um relatório tenho um cross-tab que funciona perfeitamente.

    Por motivo de necessidade do cliente precisei que uma das linhas do cross-tab fosse suprimida, sendo assim como não encontrei outra maneira de fazer, salvei o relatório com outro nome e no novo relatório criei uma section-below, copiei o cross-tab existente e colei na nova seção, removi a linha necessária deste novo cross-tab e coloquei uma formula para que fosse suprimida a section de acordo com o valor de um parâmetro passado no relatório.

    O resultado não foi muito bom, porque independentemente do valor do parâmetro não imprime nem um nem o outro.

    Sendo assim peço a ajuda dos colegas.

    Obrigado.

    Tadeu

×
×
  • Criar Novo...