Inquiridor
Não permitir alteração de um único registro

Pergunta
-
Bom dia. Tenho uma tabela simples com codigo e descrição, vou dar um exemplo como se fosse cadastro de cores só pra ficar mais facil o entendimento.
1 - Rosa
2 - Azul
3 - Vermelho
4 - Outras
Essa tabela pode ser acessada pelo usuário para cadastrar outras cores. Pode parecer sem necessidade ter o registro "Outras", visto que o usuário poderia cadastrar mais cores caso fosse necessário, mas por questões administrativas aqui, foi assim que ficou definido.
Minha situação é a seguinte: Preciso que o usuário possa editar todos os registro, exceto esse registro "Outras". Ele pode adicionar registros, deletar, alterar, porém esse registro "Outras" , ele pode apenas visualizar, não pode apagar nem editar. Tem como fazer isso?
Grata
Todas as Respostas
-
-
Boa tarde,
LaraW, acho que uma alternativa seria a criação de um gatilho do tipo Instead Of com código para verificar se essa linha foi editada, gerando um erro para impedir a operação se for o caso. Ex:
CREATE TRIGGER [dbo].[TabelaCoresInsteadOf] ON [dbo].TabelaCores INSTEAD OF INSERT, UPDATE, DELETE AS IF EXISTS (SELECT * FROM inserted AS i WHERE i.Descricao = 'Outras' ) OR EXISTS (SELECT * FROM deleted AS d WHERE d.Descricao = 'Outras' ) BEGIN RAISERROR ('Essa linha "Outras" não pode ser editada', 16, 1); END; GO
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP segunda-feira, 20 de julho de 2020 18:55
-
Boa tarde,
LaraW, acho que uma alternativa seria a criação de um gatilho do tipo Instead Of com código para verificar se essa linha foi editada, gerando um erro para impedir a operação se for o caso. Ex:
CREATE TRIGGER [dbo].[TabelaCoresInsteadOf] ON [dbo].TabelaCores INSTEAD OF INSERT, UPDATE, DELETE AS IF EXISTS (SELECT * FROM inserted AS i WHERE i.Descricao = 'Outras' ) OR EXISTS (SELECT * FROM deleted AS d WHERE d.Descricao = 'Outras' ) BEGIN RAISERROR ('Essa linha "Outras" não pode ser editada', 16, 1); END; GO
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
LaraW,
Seguindo nesta linha de raciocínio do Gapimex, você poderia através da Trigger implementar um bloco transacional, e caso realmente venha a ocorrer um Update neste registro, aplicar o Rollback do Update.
Há um tempo, implementei em um cliente, um cenário parecido com o seu, mas que na verdade faziamos uso de uma coluna de Status para justamente verificar de acordo com a valor dela se o registro poderia ou não ser Atualizado ou até mesmo Excluído.
Você já pensou em algo similar a este tipo de implementação? Como não conheço seu cenário, não posso afirmar que esta venha a ser a melhor solução, ou até mesmo o quanto poderá impactar em mudanças no seu ambiente.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]