2012-11-11 179 views
0

这是使用触发器我的第一次。SQL服务器插入触发器不工作

我的触发没有被触发,请帮助。

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 

这是假设运行内部开始查询:END如果一个条目被插入到LOG_CONNECT201211表。但即使我已经将多个数据插入LOG_CONNECT201211,也没有任何事情发生。

+1

您的触发器不引用'INSERTED'那是故意的吗? –

+1

看起来很奇怪,你没有在触发器中的任何地方引用'Inserted'伪表格......你基本上升级了所有的** - 不仅仅是实际插入的行.... –

+0

嗯,对不起,但这是我第一次使用触发器。你能告诉我如果我做错了什么吗? – user1553142

回答

0

当您的INSERT触发器触发 - 则至少有一个新行已插入!这是事实。

现在的问题是:鉴于单个或多个新行已被插入 - 你想用这个知识做什么

通常情况下,你可以如将一列设置为您无法指定为默认约束的值 - 或者您可以插入该行已插入审计表或其他内容的事实....

因此,您应该有这样的内容:

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_DATA0LOG_USING_DEPOT201211表,当某些行越来越插入一个完全独立的,不相关的表LOG_CONNECT201211 ??

,当你想,因为行已经插入到该表做一些事情的触发器用于 - 但在这种情况下,你通常需要做的行和他们的价值观已插入东西..

我只是没有看到行被插入到LOG_CONNECT201211事件中,以及您正在查询和更新的表之间的任何连接。链接在哪里? 为什么你需要运行* 这个UPDATE当数据被插入到LOG_CONNECT201211?这是有道理的,如果数据插入涉及UPDATE表中的其中一个表 - 但是这样,它只是完全没有任何意义.....

+0

是的,我希望如果一行被插入到LOG_CONNECT201211中,更新查询将被触发。这样做了吗? – user1553142

+0

@ user1553142:so **您希望在“UPDATE”查询中使用插入行中的哪些列/值**? –

+0

嗯。我想我做错了,我不想插入行中的任何东西。 – user1553142