j'ai besoin d'aide pour créer un déclencheur pour exécuter une qf.stored_procedure lorsqu'une qf.table est créée. AT le moment, j'ai un travail t exécuter la procédure stockée toutes les 15 minutes, mais changer ce n'est pas une option.
L'idée est que le déclencheur exécute la procédure stockée chaque fois que la table est mise à jour, qu'il s'agisse d'une seule ligne ou de toutes. De plus, je ne sais pas s'il faut le créer dans les déclencheurs sous la table ou les déclencheurs de base de données?. je veux que le script vérifie si le déclencheur existe et s'il ne le crée pas.
nom de la table: qf.customer_working_hours
Colonnes: WHours_id,DayOFW
Procédure stockée: qf.ServiveRefreshCustomer_WH
Suis nouveau dans les scripts SQL et les déclencheurs SQL, toute aide sera appréciée
Je suppose que vous essayez d'implémenter une réplication de base à l'aide d'un déclencheur. Tant que votre processus reste assez simple, cela devrait fonctionner correctement.
Cependant, je vous conseillerais de lire (c'est-à-dire google) pourquoi l'exécution de procédures stockées à partir de déclencheurs n'est pas une bonne idée, ainsi que la fonctionnalité de réplication transactionnelle intégrée de SQL. Voici un guide pratique sur le 2ème sujet: http://www.sql-server-performance.com/2010/transactional-replication-2008-r2/
Cela dit, voici ce que je pense devrait fonctionner:
USE [database_name]
IF EXISTS (SELECT 1 FROM sys.triggers WHERE name = N'trigger_name')
BEGIN
THROW 51000, 'The trigger [trigger_name] already exists.', 1;
END
ELSE
CREATE TRIGGER [trigger_name] ON qf.customer_working_hours
AFTER INSERT, UPDATE, DELETE AS
BEGIN
SET NOCOUNT ON
EXEC [procedure_database].qf.ServiveRefreshCustomer_WH
END
BEGIN
END
EDIT: déclencheur mis à jour s'il existe, vérifiez la suggestion d'Aaron ci-dessous.
Voici un lien très similaire:
Étant donné que la portée est une action résultant d'un changement de données dans une table, vous souhaiterez écrire le déclencheur sur la table, pas la base de données.
Lorsque vous dites "je veux que le script vérifie si le déclencheur existe et s'il ne le crée pas", voulez-vous dire le script de création du déclencheur ou la procédure qu'il est censé exécuter?
Merci Dog OnAPorch, votre lien a été très utile. J'ai oublié de vérifier si le déclencheur existe à cette occasion, mais j'ai réussi à obtenir une version de travail à partir du lien que vous avez fourni.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER qf.Update_ServiceWorkingHours_Cache
ON qf.customer_working_Hours
AFTER INSERT,UPDATE AS BEGIN
SET NOCOUNT ON;
-- EXEC do something here
EXEC [qf].[ServiceRefreshCustomer_WH]
END
GO
Tout fonctionne comme un charme, merci à tous pour l'aide