2017-01-27 5 views
1

Voici le scénario.Mise à jour en masse dans SQL

Je mets à jour plusieurs enregistrements dans une table en fonction de la condition de jointure d'une table différente. Je voudrais exécuter un SP comme et quand il y a une mise à jour. Voici le SQL que j'utilise pour la mise à jour. Je voudrais appeler le SP suivant pour chaque mise à jour qui se passe.

EXEC dbo.AddQuickEvent 

Dois-je changer mon SQL ci-dessus en boucle à travers chaque enregistrement et exécuter la SP (exec dbo.AddQuickEvent) qui est nécessaire ou est-il une autre façon d'exécuter l'autre procédure stockée quand il y a une mise à jour à la rangée.

Répondre

2

Une mise à jour est une opération basée sur un ensemble, il est donc préférable de ne pas faire de boucle dans les enregistrements et d'appeler un SP pour chaque enregistrement car cela serait horriblement inefficace.

Une meilleure option pourrait être de faire tout ce que vous essayez de faire dans 'AddQuickEvent' dans un déclencheur sur la table et opérer sur l'ensemble des enregistrements mis à jour. Lorsque vous travaillez en SQL, il est presque toujours préférable de penser en termes d'opérations d'ensemble plutôt qu'en bouclant et en traitant individuellement chaque enregistrement.

+0

Merci beaucoup Mike pour votre précieuse suggestion. Si je ne suis pas préoccupé par performace, la boucle à travers le curseur serait une option? – Naga

+0

Qu'essayez-vous de faire dans AddQuickEvent? Looping est toujours une option, presque toujours pas le meilleur. – MikeS

+0

Il y a assez peu de choses qui se passent dans cette procédure mais je pourrais toujours copier le même code dans le déclencheur – Naga