【问题标题】:How do i do this in a trigger SQL Server我如何在触发器 SQL Server 中执行此操作
【发布时间】:2010-05-19 17:10:43
【问题描述】:

第一行似乎是正确的。第二行是我的 SQLite 代码。使用代码我得到一个关于触发器附近错误的异常。在 VS 中,它说无法绑定多部分标识符。使用 SQLite,新的代表被插入的行。所以我想增加订阅收件人的人数。我如何使用 SQL Server 触发器做到这一点?

CREATE TRIGGER  trig_0  ON  subscription   
 AFTER INSERT  AS  
UPDATE user_data 
   SET msg_count = msg_count + 1 
 WHERE id = new.recipient; 

【问题讨论】:

  • 我的建议是使用视图,并基于使用 COUNT 聚合函数将 msg_count 作为计算列...

标签: sql-server triggers


【解决方案1】:

SQL Server 中没有神奇的“新”。有一个神奇的INSERTED,并且是一个表:

CREATE TRIGGER  trig_0  ON  subscription   
 AFTER INSERT  AS  
UPDATE user_data 
   SET msg_count = msg_count + 1 
FROM user_data
JOIN INSERTED ON id = INSERTED.recipient; 

【讨论】:

    【解决方案2】:

    我认为触发器使用的 inserted and delted 表不是新的'''

    3> CREATE TRIGGER myTriggerINSERT
    4> ON Employee
    5> FOR INSERT
    6> AS
    7> DECLARE @ID int, @Name nvarchar(30)
    8>
    9> SET @ID = (SELECT ID FROM inserted)
    10> SET @Name = (SELECT Name FROM inserted)
    

    更多详情:http://www.java2s.com/Code/SQLServer/Trigger/Getvaluefromupdatedinsertedanddeleted.htm

    【讨论】:

    【解决方案3】:

    假设订阅有列receiver,你可以用user_data.id加入,这里有一种方法,你可以使用插入的伪表加入回来

    CREATE TRIGGER  trig_0  ON  subscription   
     AFTER INSERT  AS  
    UPDATE user_data 
       SET msg_count = msg_count + 1 
     WHERE exists (Select * from inserted i where user_data.id = inserted.recipient) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多