2012-07-18 46 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

相關問題