Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com DDL Trigger


Oliveira.

Pergunta

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
 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...