2017-09-06 5 views
1

Je souhaite surveiller une table pour les insertions et appeler une procédure stockée avec la valeur qui a été insérée.Déclenchement SQL pour appeler une procédure stockée avec la valeur insérée comme paramètre

Tableau Surveillé (BatchDetails) aura les colonnes suivantes batchid, BatchStartTime, BatchEndTime

procédure stockée utilisera la dernière BatchID qui a été inséré

Note: Il y aura toujours une seule ligne insérée à la fois.

J'ai regardé ce lien mais semble qu'il y ait beaucoup de choses à faire, c'est-à-dire, plusieurs tables. Y a-t-il un moyen simple de le faire?

Call stored proc from after insert trigger

+2

inserts peuvent affecter * * mutliple lignes et déclenche le feu une fois par déclaration, pas une seule fois par ligne. Habituellement, vous devriez mettre la (petite quantité) de logique * dans le déclencheur, plutôt que d'appeler un proc stocké. Que fait le proc * fait *? –

+0

Une seule ligne sera insérée à la fois. Il n'y aura jamais plus d'une ligne insérée. – Abe

+2

Il me semble que la question que vous avez liée à vous-même a toutes les informations nécessaires pour répondre à votre question, si seulement vous prenez le temps de l'étudier. –

Répondre

2

Vous pouvez utilisateur un déclencheur comme celui-ci:

CREATE TRIGGER TR_Monitor_BatchDetails_Inserts 
    ON BatchDetails 
AFTER INSERT 
AS 
BEGIN 
    DECLARE @BatchId INT 
    SELECT TOP 1 @BatchId = BatchId 
    FROM INSERTED 
    ORDER BY [PK_ColumnHere/Date/OtherOrderingColumn] DESC 

    EXEC SomeStoredProc @BatchId 
END 

Mais il y a quelques défauts avec elle:

1 - il peut y avoir plus de lignes INSERTED (lignes qui sont en cours d'insertion) et ce ne sera pas gérer tous les

2 - vous pouvez vouloir appelez votre procédure à partir de l'endroit où les insertions sont effectuées dans le tableau BatchDetails. Peut-être avoir un proc qui fait les inserts, et ajouter là l'appel à cette procédure. Ce sera une meilleure façon d'aborder cela.

Espoir il est logique

+6

Si vous voulez écrire un trigger qui ne peut gérer que des insertions à une seule ligne, j'insisterais normalement pour qu'il inclue un * check * pour cette condition préalable et renvoie une erreur si elle n'est pas satisfaite Sinon c'est un bug qui attend de mordre quelqu'un (6 mois, un an, etc) plus tard quand ils commencent à effectuer des insertions à plusieurs rangs. –