使用变量的SQL触发器

使用变量的SQL触发器,sql,triggers,Sql,Triggers,我需要帮助创建这个触发器,任何帮助都将不胜感激,我无法保存这个脚本,它说的是“无效的列名OfferId”。但是我检查了所有的列名,它们都是正确的 CREATE TRIGGER dbo.OrderOffer_UpdatedUnits ON dbo.OrderOffer FOR UPDATE AS BEGIN DECLARE @OfferId char(5) SET @OfferId = (Select OfferId From INSERTED i, Orde

我需要帮助创建这个触发器,任何帮助都将不胜感激,我无法保存这个脚本,它说的是“无效的列名OfferId”。但是我检查了所有的列名,它们都是正确的

  CREATE TRIGGER dbo.OrderOffer_UpdatedUnits
  ON dbo.OrderOffer
  FOR  UPDATE
  AS

  BEGIN
  DECLARE @OfferId char(5)     SET  @OfferId = (Select OfferId From INSERTED i, OrderOffer a Where   i.OrderOfferid = a.OrderOfferid);
  DECLARE @UnitsAvailable int  SET  @UnitsAvailable = (Select SUM(UnitsAvailable) From dbo.Offer    Where OfferId=@OfferId);


  UPDATE dbo.OrderOffer SET dbo.UnitsAvailable = @UnitsAvailable
  FROM INSERTED i, OrderOffer a
  WHERE i.OrderOfferid = a.OrderOfferid 

 END
试试这个:

CREATE TRIGGER dbo.OrderOffer_UpdatedUnits
ON dbo.OrderOffer
FOR UPDATE
AS
BEGIN

    UPDATE a
    SET dbo.UnitsAvailable = 
        (
            Select SUM(b.UnitsAvailable) 
            From dbo.Offer b 
            Where b.OfferId = a.OfferId
        )
    FROM OrderOffer a
    INNER JOIN INSERTED i
    ON i.OrderOfferid = a.OrderOfferid

END

注意:我删除了变量,因为这将假定您一次只更新一行。即使更新在多行上运行,上述操作仍应有效。

记住,更新可能会影响多行;不仅仅是一个。谢谢你,约翰,我得到了这个错误:第8行中“')”附近的语法不正确,无需担心/道歉;我在那里留下了一些原始代码,去掉了其他部分。现在应该可以了。约翰比万,你有时间的时候能帮我提个问题吗。提前谢谢你!嘿@Carlos,你能不能再多告诉我一些你还需要帮助的信息?提前谢谢。约翰贝文,很高兴再次收到你的来信,上周我正在努力编写一个触发器,我在这里提出了一个新问题:链接[我花了一段时间才使这个触发器工作,但代码看起来很混乱,我希望你能帮我简化它。我会非常感激的。祝你愉快!