Aujourd’hui je vais vous montrer un trigger tout simple pour empêcher la modification d’un champs.

Nous sommes sur un environnement SQL Server avec une base de Gestion Commerciale Sage 100cloud. Suite à des problèmes constatés sur la modification du paramètre « Sommeil » sur des clients à profil financier sensible, la comptabilité me demande que ces clients identifiés soient verrouillés ou du moins que la personne qui cherche à faire la modification soit avertie du caractère particulier de celle-ci.

Pour cela j’ai choisi de faire un petit trigger qui fera un message d’alerte. Je vais me baser sur le numéro de client pour restreindre ma sélection. Ce trigger sera créé sur la table [dbo].[F_COMPTET]

USE [MA_BASE_GESCOM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[Verification_Sommeil] ON [dbo].[F_COMPTET]
for UPDATE
AS
SET NOCOUNT ON; declare @num_client varchar(17)
if UPDATE(CT_Sommeil)
BEGIN
select @num_client= INSERTED.CT_Num from INSERTED
if(@num_client in ('123', '456', '789'))
BEGIN
RAISERROR('Ce compte ne doit pas être enlevé de son sommeil ! (voir avec la comptabilité)',11,1)
rollback transaction
RETURN
END
END

Je ne vous détaille pas tout, il faut juste voir que le trigger ne se déclenche que sur la modification et uniquement sur le champs CT_Sommeil afin d’être le plus précis possible. Je vais chercher le numéro client concerné par la modification (CT_Num) que je place dans une variable afin de tester si celui-ci fait partie de la liste de la comptabilité. Si c’est le cas, je n’autorise pas l’update et affiche un message d’erreur.

Close