Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Procédure dans trigger

2 réponses
Avatar
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

2 réponses

Avatar
SQLpro
On 16 jan, 11:24, J wrote:
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
Avatar
J
SQLpro a écrit :
On 16 jan, 11:24, J wrote:
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