je le déclencheur suivant:SQL Server Supprimer Trigger Pour mettre à jour plusieurs colonnes dans le tableau même
CREATE TRIGGER Users_Delete
ON Users
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
-- Patients
UPDATE Patients SET ModifiedByID=NULL WHERE ModifiedByID=ID;
UPDATE Patients SET CreatedByID=NULL WHERE CreatedByID=ID;
UPDATE Patients SET DeletedByID=NULL WHERE DeletedByID=ID;
END
Je me demandais s'il y a un moyen de « combiner » ces trois déclarations de mise à jour dans quelque chose qui serait comme ce qui suit :
UPDATE Patients SET
(ModifiedByID=NULL WHERE ModifiedByID=ID) OR
(CreatedByID=NULL WHERE CreatedByID=ID) OR
(DeletedByID=NULL WHERE DeletedByID=ID);
Je voudrais vraiment avoir une seule instruction pour augmenter les performances.
La raison pour laquelle j'utilise la gâchette plutôt que sur ON DELETE
pour le FOREIGN KEY
est parce que je reçois l'erreur ayant plus d'un ON DELETE
provoque l'erreur suivante:
Introducing FOREIGN KEY constraint 'FK_Patients_Users_Deleted' on table 'Patients' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
EDIT: serait-il bon avoir des index sur toutes les colonnes ModifiedByID, CreatedByID, DeletedByID? La suppression d'un utilisateur sera bien sûr rare, alors cela vaut-il la peine d'ajouter des index à 3 colonnes?
Ce qui me dérange, c'est que vous modifiez ces données du tout. Il est préférable d'inactiver un utilisateur plutôt que d'en supprimer un qui a des enregistrements enfants associés à celui-ci. Maintenant, vous ne serez pas en mesure de dire qui a créé l'enregistrement qui est probablement d'une certaine importance, surtout si l'utilisateur a été renvoyé pour des raisons de performance. – HLGEM
C'est en fait un point très valable. Je vais prendre cela en considération. – TheCloudlessSky