Déclencher des mises à jour juste la ligne insérée
Je suis en train de créer un simple déclencheur à l'aide de TSQL (ou SQL Server 2008). Le problème, c'est: mon déclencheur actuel est la mise à jour de l'ensemble de la table. C'était bien un temps, mais maintenant que la table a plus de 20k lignes. Donc, je veux un déclencheur qui met à jour uniquement les lignes qui sont insérées.
Voici mon simple déclencheur:
CREATE TRIGGER trig_MyPplUpdate
ON [Persons]
FOR INSERT
AS
Begin
Update Persons
set MyFile = NULL
where Len(MyFile) < 60
End
Je pense que je vais devoir utiliser le "insérée" de la table ou de la row_number
fonction commandée par la clé primaire. Des idées?
OriginalL'auteur Gaspa79 | 2012-01-24
Vous devez vous connecter pour publier un commentaire.
S'il est nécessaire d'utiliser un déclencheur à tous, je voudrais utiliser un
INSTEAD OF
déclencheur pour régler les valeurs de pré-insertion et d'éviter la nécessité deJOIN
en arrière sur la table de base et de les mettre à Jour par la suite.Oui. SQL Server va prendre votre instruction insert et la construction de la
inserted
pseudo de la table qui a toutes les insérable les colonnes de[Persons]
. Ensuite, vous sélectionnez à partir de ce pour faire l'insert dans la table de base. Vous n'avez pas fourni votre structure de table, j'ai donc dû faire les autres noms de colonne.Ok super! Je vais essayer dès maintenant. Je suppose que Lors de la Len(MyFile) >= PUIS Myfile est parce que si cette condition n'est pas satisfaite de ne pas insérer la valeur de la colonne, par conséquent, il sera null. Sur la d'autres cas, lorsqu'il est satisfait, il va insérer la colonne (MyFile). Merci beaucoup de l'homme, sérieusement,= -).
Oui, il y a un défaut
ELSE NULL
si la condition n'est pas remplie.Je vous recommande de spécifier explicitement les noms de colonnes dans votre instruction INSERT - de cette façon, vous n'aurez pas de mauvaises surprises si votre table devient soudainement une colonne supplémentaire ...
OriginalL'auteur Martin Smith
Vous devez rejoindre la
Inserted
pseudo table dans votreUPDATE
déclaration. Toujours être conscient que SQL Server active le déclencheur une fois par déclaration et qu'un énoncé peut très bien modifier/insérer plusieurs lignes à la fois - de sorte que votreInserted
table tout à fait probable que va contenir plus d'une ligne juste besoin de garder cela à l'esprit lorsque vous écrivez votre déclencheur.Essayer quelque chose comme cela:
ou utiliser quelle que soit la colonne unique (votre clé primaire), vous devez obtenir exactement les lignes qui ont été insérées.
OriginalL'auteur marc_s