内部触发器以获取新插入的记录

时间:2014-07-09 15:47:40

标签: sql sql-server sql-server-2008

我正在尝试执行查询但遇到了麻烦。首先,我有表A和表B.表A包含以下列(RowID,ItemNumber,CaseCount,Elc,TotalElc,TimeStamp)。表B包含以下列(RowID,ItemNumber,Elc,TotalElc) 我正在使用仪表板将值插入表A.我将整数插入ItemNumber和CaseCount。

插入这些值后,我在任何插入后使用表A上的内部触发器。内部触发器获取刚插入的值,并使用ItemNumber查找表B以获取ELC和Totallc,并将其插入到表A中,其中ItemNumber与表B匹配。

  1. 如何使用触发器获取值以检索新插入的值(值为ItemNumber,CaseCount)?
  2. 然后在检索到值之后,如何使用项目编号(将立即插入20个ItemNumbers)来查找表B中的值并将它们插入到表A中ItemNumber匹配的位置?
  3. 我没有太多代码,因为我几乎被困在第一位。任何帮助都非常感谢。

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TRIGGER ObtainValues 
       ON  Table A 
       AFTER  INSERT
    AS 
    BEGIN
        SET NOCOUNT ON;
    
        -- Insert statements for trigger here
    
    END
    GO
    

2 个答案:

答案 0 :(得分:0)

由于您已在表A上创建了Trigger,因此无论何时插入行,SQL Server都将创建一个名为 INSERTED 的表,该表仅包含新添加的行。此 INSERTED 表的范围仅在您的触发器主体中。

检查以下代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER ObtainValues 
   ON  Table A 
   AFTER  INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE TableA 
    SET col1 = B.col1,
        col1 = B.col1
    FROM TableB B
    WHERE B.ItemNumber = (SELECT ItemNumber FROM INSERTED)

END
GO

同样,当发生删除事件时,会创建 DELETED 表。

答案 1 :(得分:0)

以Nithin的优秀榜样为出发点。我对此进行了修改,因此它将处理多行插入。

CREATE TRIGGER ObtainValues 
   ON  TableA 
   AFTER  INSERT
AS 
BEGIN
    SET NOCOUNT ON;
UPDATE TableA 
SET col1 = B.col1,
    col1 = B.col1
FROM TableB B
INNER JOIN TableA A on a.[YourPrimaryKey] = b.[YourPrimaryKey]

SET NOCOUNT OFF;
GO