0

トリガーを使用するのはこれが初めてです。

トリガーがトリガーされていません。助けてください。

CREATE TRIGGER sbhack_autoban
ON LOG_CONNECT201211
FOR INSERT
AS
  BEGIN
      /* query to run if single or multiple data is 
       inserted into LOG_CONNECT201211 table */
      UPDATE login.dbo.USER_CHECK_LOGIN
      SET    login.dbo.USER_CHECK_LOGIN.CHECKLOGIN = 2
      WHERE  login.dbo.USER_CHECK_LOGIN.USER_KEY IN 
              (SELECT e.USER_KEY
                 FROM   game.dbo.CHAR_DATA0 AS e
                        INNER JOIN gamelogs.dbo.LOG_USING_DEPOT201211 AS p
                          ON e.CHAR_KEY = p.CHAR_KEY
                 WHERE  p.GATENUM = 150)
             AND login.dbo.USER_CHECK_LOGIN.CHECKLOGIN = 0
             AND login.dbo.USER_CHECK_LOGIN.USER_KEY != 51;
  END 

これは、エントリがテーブルに挿入された場合に、BEGIN:END内でクエリを実行することを想定していLOG_CONNECT201211ます。しかし、に複数のデータを挿入しても何も起こりませんLOG_CONNECT201211

4

1 に答える 1

0

INSERTトリガーが起動すると、少なくとも 1 つの新しい行が挿入されます。あれは事実です。

ここで問題は、1 つまたは複数の新しい行が挿入された場合、この知識をどうしたいですか??

通常、たとえば、デフォルトの制約として指定できない値に列を設定できます。または、行が監査テーブルなどに挿入されたという事実を挿入できます....

したがって、次のようになります。

CREATE TRIGGER sbhack_autoban
ON LOG_CONNECT201211
FOR INSERT
AS
    INSERT INTO LogAudit(InsertedDate, UserKey)
        SELECT 
             GETDATE(), i.User_Key
        FROM
             Inserted i

またはそのようなもの....

更新:行が挿入されたときにそのステートメントを実行したいUPDATE- 100% 明確ではなく、挿入された行からどの列/値を使用したいe.UserKeyか - 列のみのように見える - 正しいですか?

次に、次のUPDATEようになります。

UPDATE login.dbo.USER_CHECK_LOGIN
SET login.dbo.USER_CHECK_LOGIN.CHECKLOGIN = 2
WHERE  
   login.dbo.USER_CHECK_LOGIN.USER_KEY IN 
          (SELECT USER_KEY FROM Inserted)
   AND login.dbo.USER_CHECK_LOGIN.CHECKLOGIN = 0
   AND login.dbo.USER_CHECK_LOGIN.USER_KEY != 51;

更新 #2:

私がまだ理解していない点は、いくつかの行がまったく別の無関係なテーブルに挿入されているときに、テーブルUSER_CHECK_LOGINCHAR_DATA0使用する更新を実行したいのはなぜですか??LOG_USING_DEPOT201211LOG_CONNECT201211

行がそのテーブルに挿入されたために何かをしたいときにトリガーが使用されますが、その場合、通常、挿入された行とその値で何かをしたい...

イベントに挿入されている行LOG_CONNECT201211と、クエリを実行して更新しているテーブルとの間に関連性が見られません。リンクはどこですか?? データが挿入されたときに* thisを実行する必要があるのはなぜですか?? に関連するテーブルの 1 つにデータが挿入された場合、それは理にかなっていますが、このように、まったく意味がありません .....UPDATELOG_CONNECT201211UPDATE

于 2012-11-11T11:39:41.527 に答える