2010-09-16 6 views
0

Je souhaite convertir un proc enregistré en déclencheur. Le proc stocké est censé être exécuté après les insertions/mises à jour, mais les utilisateurs oublient de l'exécuter plus souvent qu'autrement!Processus stocké SQL: aide à la conversion en déclencheur

Les inserts proc stockées valeurs recalculées pour certaines lignes:

--Delete rows where RowCode=111 
DELETE FROM dbo.TableA WHERE [year]>=1998 AND RowCode=111 

--Insert new values for RowCode=111 for years>=1998 
INSERT INTO dbo.TableA 
SELECT [Year], RowCode=111, ColCode, SUM(Amt) AS Amt 
FROM dbo.TableA 
WHERE [Year]>=1998 AND RowCode IN (1,12,23) AND ColCode=14 
GROUP BY [Year], ColCode 

Je voudrais mettre cela en un déclencheur afin que les utilisateurs ne doivent pas penser à l'exécution d'une procédure.

J'ai les éléments suivants commencés, mais je ne suis pas sûr si je suis sur la bonne voie. Dois-je utiliser pour, après ou au lieu de?

CREATE TRIGGER TRIU_TableA 
ON TableA 
FOR INSERT,UPDATE AS 

BEGIN 
    SET NOCOUNT ON 
    IF EXISTS (SELECT * FROM Inserted WHERE RowCode=111) 
    BEGIN 
    INSERT INTO TableA 
    SELECT [Year], RowCode, ColCode, SUM(Amt) AS Amt 
    FROM Inserted 
    WHERE [Year]>=1998 AND RowCode IN (1,12,23) AND ColCode=14 
    GROUP BY [Year], ColCode 
    END 

END 

Une aide pour réaliser cette opération serait très appréciée.

Un grand merci
Mark

Répondre

0

Vous devez utiliser FOR

En comparant le déclenchement du proc stocké tout semble bien.

Quels autres problèmes rencontrez-vous?

1

Vous avez oublié la partie de suppression.

Mais pourquoi votre application n'exécute-t-elle pas automatiquement le proc existant après chaque insertion/mise à jour? Les personnes mettent-elles à jour votre base de données à partir d'une fenêtre de requête? Faites-en un déclencheur AFter, After et For sont les mêmes, mais après est la nouvelle syntaxe.

Questions connexes