Verificação de campos texto sem alteração

SQL Server

SQL

26/02/2018

Olá pessoal, tudo bem!?
Qual a Solução recomendada para uma situação dessas: existem 4 campos texto que precisam ser verificados se sofreram alteração. Esses campos texto irão receber em média 100 caracteres. Porém a trigger não captura as informações do DELETED e, dessa forma, não conseguimos comparar o INSERTED com o DELETED.

Estratégias que já foram testadas sem sucesso.

Estratégia 1 . Comparar INSERTED com DELETED:
Msg 311, Level 16, State 1, Procedure TRG_TGFCAB_MRA_001, Line 46
Não é possível usar colunas de text, ntext ou image nas tabelas 'inserted' e 'deleted'.


Estratégia 2 . Usar Instead Of:
Não salva a transação corrente e desconsidera as informações que foram editadas pelo usuário no formulário do Front end. (Essa regra é para apenas alguns campos, outros permite alterar)

Estratégia 3 . Usar COLUMNS_UPDATED():
Erro de estouro aritmético para o tipo int, valor =

Existe alguma solução para essa questão no SQL Server? no Oracle uma opção seria comparar por exemplo :NEW. COM :OLD.
Grato pela ajuda.

Essa dúvida foi gerada a partir de um comentário no [url:descricao=Curso de Administração de Banco de Dados com SQL Server]https://www.devmedia.com.br/curso/curso-sql-server/406[/url]
Gustavo Cabreira

Gustavo Cabreira

Curtidas 0

Melhor post

Rodrigo Duclerc

Rodrigo Duclerc

07/03/2018

Olá Gustavo, acredito que se o impedimento em testar Inserted com Deleted seja em função do tipo de campo utilizado (text), a melhor forma seria trocar este tipo por varchar ou nvarchar. Como são apenas 100 caracteres, não justifica usar um campo text. Campos text devem ser usados apenas quando há necessidade de conteúdos muito longos e são péssimos para se fazer buscar por eles ou gerar relatórios. Essa sugestão serve para resolver seu problema?

Qualquer dúvida é só falar.

Um abraço!
GOSTEI 1

Mais Respostas

Gustavo Cabreira

Gustavo Cabreira

26/02/2018

Oi Rodrigo.

Ok.Alterando o campo no banco para Varchar resolveu sim.

Esse caso em específico era a própria aplicação que gerava um campo do tipo text , porém realmente não a necessidade pois no caso do cliente um Varchar(400) é o suficiente.

Sobre esse item então a solução é não trabalhar realmente com um campo do tipo text pois o sql nesse caso não tem uma tratativa , alterando a coluna para varchar resolvemos a questão.

Obrigado pelo ajuda!
GOSTEI 0
POSTAR