SQL Server après le déclencheur de mise à jour
J'ai un problème avec ce déclencheur. Je tiens à mettre à jour les informations demandées
uniquement pour la ligne en question (celle que je viens de mettre à jour) et pas l'ensemble de la table.
CREATE TRIGGER [dbo].[after_update]
ON [dbo].[MYTABLE]
AFTER UPDATE
AS
BEGIN
UPDATE MYTABLE
SET mytable.CHANGED_ON = GETDATE(),
CHANGED_BY=USER_NAME(USER_ID())
Comment dois-je dire à la détente que cela s'applique uniquement à la ligne en question?
source d'informationauteur user3927897
Vous devez vous connecter pour publier un commentaire.
Voici mon exemple après un test
Le spécial inséré table à l'information à partir de l'enregistrement mis à jour.
Essayez ceci (mise à jour, pas après la mise à jour)
Il est très simple de le faire,
D'abord créer une copie de votre table que vous souhaitez conserver le journal de
Par exemple, vous avez de la Table dbo.SalesOrder avec des colonnes SalesOrderId, FirstName,LastName, LastModified
Votre Version d'obtenir le tableau doit être dbo.SalesOrderVersionArchieve avec des colonnes SalesOrderVersionArhieveId, SalesOrderId, FirstName,LastName, LastModified
Ici est la façon dont vous allez mettre en place un trigger sur SalesOrder table
Maintenant, si vous effectuez des modifications dans saleOrder table, il va vous montrer le changement de VersionArchieve table
d'essayer cette solution.
Je n'ai pas vérifié cela avec des versions antérieures de sql server, mais cela fonctionne avec sql server 2012.
Vous devriez être en mesure d'accéder à la
INSERTED
table et récupérer les ID de la table ou de la clé primaire. Quelque chose de semblable à cet exemple ...Voici un lien sur MSDN sur le
INSERTED
etDELETED
tables disponibles lors de l'utilisation de déclencheurs: http://msdn.microsoft.com/en-au/library/ms191300.aspxTout d'abord, votre détente comme vous l'avez déjà voir va mettre à jour tous les enregistrements dans la table. Il n'y a pas de filtrage fait pour atteindre le jus des lignes de changé.
Deuxièmement, vous êtes en supposant que seulement une ligne changements dans le lot, ce qui est inexact puisque plusieurs lignes pourrait changer.
La façon de le faire correctement est d'utiliser le virtuel tables inserted et deleted: http://msdn.microsoft.com/en-us/library/ms191300.aspx