qf.tableが作成されたときにqf.stored_procedureを実行するためのトリガーの作成にいくつかの助けが必要です。 AT現時点では、15分ごとにストアドプロシージャを実行するジョブがありますが、変更することはできません。
トリガーは、テーブルが単一行であるかすべてであるかに関係なく、テーブルが更新されるたびにストアドプロシージャを実行するというものです。同様に、それをテーブルまたはデータベーストリガーの下のトリガーに作成するかどうかもわかりません。スクリプトでトリガーが存在するかどうかを確認し、存在しない場合は作成します。
テーブル名:qf.customer_working_hours
列:WHours_id,DayOFW
ストアドプロシージャ:qf.ServiveRefreshCustomer_WH
SQLスクリプティングとSQLトリガーは初めてです。
トリガーを使用して基本的なレプリケーションを実装しようとしていると想定しています。プロセスがかなり単純である限り、これは問題なく機能するはずです。
ただし、トリガーからストアドプロシージャを実行することが望ましくない理由(およびgoogle)と、SQLに組み込まれているトランザクションレプリケーション機能についてもお読みください。 2番目のトピックの実用的なガイドを次に示します。 http://www.sql-server-performance.com/2010/transactional-replication-2008-r2/
そうは言っても、ここで私はうまくいくと思います:
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
編集:存在する場合はトリガーを更新し、以下のアーロンの提案からチェックします。
これは非常によく似たリンクです。
スコープはテーブル内のデータ変更から生じるアクションなので、データベースではなくテーブルにトリガーを記述します。
「スクリプトでトリガーが存在するかどうかを確認し、存在しない場合は作成する」と言う場合、トリガー作成スクリプトまたは実行するはずのプロシージャを意味しますか?
Dog OnAPorchに感謝します。リンクは非常に役に立ちました。まれにこのトリガーにトリガーが存在するかどうかを確認していませんが、指定したリンクから正常に機能するバージョンを取得できました。
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
それはすべて魅力のように機能します、助けてくれてありがとう