2012-07-18 49 views
0

你好,我创建了一个SQL触发器,它复制编辑的行并设置一个新的ID。还有另一张由ID连接的桌子。其对我来说很难解释,我给你举个例子:如何创建从另一个表复制选择的SQL触发器?

表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   BEZEICHNUNG   PREIS 

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

我的目标是在表2中插入属于旧行的所有房间标识的新标识。

它应该是这样的:

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

在触发,插入后添加

SELECT @intNewID = Scope_Identity() 

这得到的ID新插入的产品

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

这将获取从旧产品链接删除的产品,并复制它们

+0

可能有多个行同时更新。 – 2012-07-18 08:30:16

+0

在这种情况下,请在INSERT语句中添加一个OUTPUT子句,然后加入该表。 – podiluska 2012-07-18 08:32:40

+0

它的作品非常感谢你。你能解释一下你的代码吗? – 2012-07-18 09:51:49

相关问题