1

以前にトリガーを使用したことはありません。

これは、挿入が検出されたときにトリガーしたいクエリです。

UPDATE USER_CHECK_LOGIN
   SET CHECKLOGIN = 2
 WHERE USER_CHECK_LOGIN.USER_KEY IN
       (SELECT e.USER_KEY
          FROM XTREME.game.dbo.CHAR_DATA0 AS e
         INNER JOIN XTREME.gamelogs.dbo.LOG_USING_DEPOT201211 AS p
               ON e.CHAR_KEY = p.CHAR_KEY
         WHERE p.GATENUM = 150
       )
   AND USER_CHECK_LOGIN.CHECKLOGIN = 0
   AND USER_CHECK_LOGIN.USER_KEY!=51;

しかし、問題は私が探し回っていたのですが、条件を使用する方法が見つからないことです。

必要なのは、呼び出されたテーブルで挿入が行われたときにスクリプトがトリガーされ、LOG_CONNECT201211その挿入にgatenum=150andが含まれている場合kind=21/22/23

kind が 21 の場合はこのクエリを実行し、22 の場合はこのクエリを実行し、23 の場合はこのクエリを実行します。

そんな感じ。

SELECT *
  FROM LOG_CONNECT201211
 WHERE GATENUM=150
   AND (KIND=21 OR KIND=22 OR KIND=23)

ご覧のように、テーブルは で終わります201211。これは、翌月のテーブルが になることを意味します201212。そのため、テーブルを現在の月のテーブルに自動的に変更する必要もあります。

4

1 に答える 1

1

なぜ毎月テーブルを作成する必要があるのですか?テーブルLOG_CONNECT列の日時を追加することをお勧めします。したがって、トリガー後に作成された当月を確認することが可能になります。

CREATE TRIGGER dbo.triggerName ON LOG_CONNECT
FOR INSERT
AS
BEGIN
  IF EXISTS (
             SELECT 1
             FROM inserted i
             WHERE GATENUM=150 AND KIND IN (21, 22, 23) AND DATEPART(mm, newColumnDate) = DATEPART(mm, GETDATE())
             )
  BEGIN
    ...your logic
  END 
END
于 2012-11-11T08:09:50.720 に答える