Bonjour,
je n'ai jamais encore utilisé de Trigger et j'ai un cas de figure qui me semble en nécessiter un :
on a un stockage de fichier en blob dans la table FileTable :
lorsque l'on veut supprimer un fichier de la base, on ne supprime pas l'enregistrement, on update le champs [DataField] avec la valeur NULL (on veut garder un log).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 CREATE TABLE [dbo].[FileTable]( [Compteur] [int] IDENTITY(1,1) NOT NULL, [UID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_FileTable_UID] DEFAULT (newid()), [FileName] [nvarchar](100) NOT NULL, [DataField] [image] NULL, [Partial] [tinyint] NOT NULL, [MimeType] [nvarchar](100) NULL, [Created] [datetime] NOT NULL CONSTRAINT [DF_FileTable_Created] DEFAULT (getdate()), [Expediteur] [int] NULL, [IpClient] [varchar](50) NULL, [Taille] [bigint] NULL, [Histo] [bit] NULL CONSTRAINT [DF_FileTable_Histo] DEFAULT ((1)), [Effacer] [bit] NULL CONSTRAINT [DF_FileTable_Effacer] DEFAULT ((0)), CONSTRAINT [PK__FileTable__34C8D9D1] PRIMARY KEY CLUSTERED ( [Compteur] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Cela fonctionne très bien sauf quand le fichier est très gros, le traitement est trop long et provoque des erreurs de timeout avec l'interface.
Pour contourner cela, j'ai créé le champ binaire [Effacer].
là, j'ai 2 alternatives :
1- un trigger qui se déclenche lorsque l'on update [Effacer] avec la valeur 1 et qui update le champs [DataField] avec la valeur NULL
2- un Job de l'agent SQL serveur qui toutes les 10 minutes traite les enregistrements dont le champs [Effacer] a la valeur 1
Qu'en pensez-vous ?
merci d'avance
Partager