如何创建一个从另一个表复制选择的SQL Trigger?

时间:2012-07-18 08:03:19

标签: sql sql-server-2008 triggers

Hello我创建了一个SQL Trigger,它复制已编辑的行并设置一个新的ID。还有另一个表由id连接。我很难解释我给你举个例子:

表1与产品:

ID           BEZEICHNUNG            PREIS

45           Coffee                 5,60
46           Tea                    2,20

表2显示从房间到产品的连接:

ProductID          RoomID
45                 11
45                 46
46                 48
46                 41

当我更新表1中第一行的价格时,触发器会创建一个新行,其中包含一个新ID:

ID           BEZEICHNUNG            PREIS

45           Coffee                 5,60
46           Tea                    2,20
47           Coffee                 4

我的目标是在表2中插入新ID,其中包含属于旧行的所有房间ID。

它应该是这样的:

ProductID          RoomID
45                 11
45                 46
46                 48
46                 41
47                 11
47                 46

我目前的触发器如下:

ALTER TRIGGER [dbo].[DIENSTLEISTUNG_UPDATE]
   ON [dbo].[DIENSTLEISTUNG]
   INSTEAD OF UPDATE
AS
BEGIN
      SET  NOCOUNT ON;

    INSERT INTO [DIENSTLEISTUNG] (BEZEICHNUNG, MENGENEINHEIT, 
        PREIS, BESCHREIBUNG, VORLAUFZEIT,
        AZ_MO, AZ_DI,AZ_MI,AZ_DO,AZ_FR,
        AZ_SA,AZ_SO,DIENSTLEISTUNGSART_ID,
        UPDATE_USER, UPDATE_DATE, RUESTZEIT,
        PERMISSIONS, KONTRAKTPOSITION,ARTIKELNUMMER,
        ANZAHL, BUCHUNGSHINWEIS, SONDERWUNSCH,FLAG)

    SELECT  BEZEICHNUNG, MENGENEINHEIT, 
        PREIS, BESCHREIBUNG, VORLAUFZEIT,
        AZ_MO, AZ_DI,AZ_MI,AZ_DO,AZ_FR,
        AZ_SA,AZ_SO,DIENSTLEISTUNGSART_ID,
        UPDATE_USER,GETDATE(),RUESTZEIT,
        PERMISSIONS, KONTRAKTPOSITION,ARTIKELNUMMER,
        ANZAHL, BUCHUNGSHINWEIS, SONDERWUNSCH,
        0 
    FROM INSERTED

    UPDATE  DIENSTLEISTUNG
    SET     FLAG = 1 
    FROM    DIENSTLEISTUNG 
            INNER JOIN INSERTED
                ON INSERTED.ID = DIENSTLEISTUNG.ID
SET  NOCOUNT OFF;      
END

1 个答案:

答案 0 :(得分:1)

在触发器中,插入后添加

 SELECT @intNewID = Scope_Identity()  

这将获取新插入产品的ID

 INSERT table2 (ProductID, RoomID)  
 SELECT @intNewID, RoomID
 FROM deleted
      INNER JOIN table2 on deleted.productid=table2.productid

这会从已删除的产品中获取与旧产品关联的产品,并将其复制