web-dev-qa-db-ja.com

テーブルが更新されたときにストアドプロシージャを実行するSQLトリガーを作成する方法

qf.tableが作成されたときにqf.stored_procedureを実行するためのトリガーの作成にいくつかの助けが必要です。 AT現時点では、15分ごとにストアドプロシージャを実行するジョブがありますが、変更することはできません。

トリガーは、テーブルが単一行であるかすべてであるかに関係なく、テーブルが更新されるたびにストアドプロシージャを実行するというものです。同様に、それをテーブルまたはデータベーストリガーの下のトリガーに作成するかどうかもわかりません。スクリプトでトリガーが存在するかどうかを確認し、存在しない場合は作成します。

テーブル名:qf.customer_working_hours列:WHours_id,DayOFW

ストアドプロシージャ:qf.ServiveRefreshCustomer_WH

SQLスクリプティングとSQLトリガーは初めてです。

4

トリガーを使用して基本的なレプリケーションを実装しようとしていると想定しています。プロセスがかなり単純である限り、これは問題なく機能するはずです。

ただし、トリガーからストアドプロシージャを実行することが望ましくない理由(および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

編集:存在する場合はトリガーを更新し、以下のアーロンの提案からチェックします。

6

これは非常によく似たリンクです。

https://stackoverflow.com/questions/3768278/call-stored-procedure-within-create-trigger-in-sql-server

スコープはテーブル内のデータ変更から生じるアクションなので、データベースではなくテーブルにトリガーを記述します。

「スクリプトでトリガーが存在するかどうかを確認し、存在しない場合は作成する」と言う場合、トリガー作成スクリプトまたは実行するはずのプロシージャを意味しますか?

0
Dog OnAPorch

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

それはすべて魅力のように機能します、助けてくれてありがとう

0