Procédure dans trigger

Le
J
Bonjour,

J'ai une procédure qui doit être appelée depuis différents trigger.
Je dois donc appeler cette procédure pour chaque ligne de la table
deleted et inserted (en fonctions d'autres critères mais peu importe).

Dois-passer par un cursor pour récupérer les valeurs à transmettre à la
procédure ?
J'ai souvent lu que les curseurs étaient à éviter. Est-ce qu'il serait
plus efficace de faire une fonction à la place de la procédure et
d'appeler cette fonction depuis une simple requête de sélection, genre :
select maFonction(deleted.xxx, deleted.yyy) from deleted
Est-ce que ça va appeler maFonction pour chaque ligne de deleted ?

Merci.

Jean
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SQLpro
Le #11883741
On 16 jan, 11:24, J
Bonjour,

J'ai une procédure qui doit être appelée depuis différents trigger .
Je dois donc appeler cette procédure pour chaque ligne de la table
deleted et inserted (en fonctions d'autres critères mais peu importe).

Dois-passer par un cursor pour récupérer les valeurs à transmettre à la
procédure ?



Vous pouvez, mais TRIGER + SP c'est TRES TRES contre performant...

J'ai souvent lu que les curseurs étaient à éviter.



oui, car peu optimisable donc lent

Est-ce qu'il serait
plus efficace de faire une fonction à la place de la procédure et



pourquoi pas

d'appeler cette fonction depuis une simple requête de sélection, genre :
select maFonction(deleted.xxx, deleted.yyy) from deleted
Est-ce que ça va appeler maFonction pour chaque ligne de deleted ?



oui, mais une fonction ne peut pas faire de mise à jour...


Merci.

Jean



Pour d''autres solutions, lisez l'article que j'ai écrit :
http://sqlpro.developpez.com/cours/sqlserver/MSSQLServer_avoidCursor/

A +


Fred Brouard, alias SQLpro
Expert langage SQL, modélisation de données et MS SQL Server
Le site du SQL : http://sqlpro.developpez.com/
Formations, conseils, audit, modélisation,
optimisation, tuning : http://www.sqlspot.com
J
Le #11883731
SQLpro a écrit :
On 16 jan, 11:24, J
Bonjour,

J'ai une procédure qui doit être appelée depuis différents trigger.
Je dois donc appeler cette procédure pour chaque ligne de la table
deleted et inserted (en fonctions d'autres critères mais peu importe).

Dois-passer par un cursor pour récupérer les valeurs à transmettre à la
procédure ?



Vous pouvez, mais TRIGER + SP c'est TRES TRES contre performant...



Bon, j'ai réussi à me passer de la procédure et j'ai tout fait dans les
triggers avec des insert et des updates assez compliqués.

d'appeler cette fonction depuis une simple requête de sélection, genre :
select maFonction(deleted.xxx, deleted.yyy) from deleted
Est-ce que ça va appeler maFonction pour chaque ligne de deleted ?



oui, mais une fonction ne peut pas faire de mise à jour...



Argh, j'avais oublié.

C'est dommage qu'on ne puisse pas avoir une construction du style :
exec xxx @abc=tb.field
from table tb
where ...

En tout cas, merci pour votre réponse.

Jean
Publicité
Poster une réponse
Anonyme