0

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

表 1 与产品:

ID           BEZEICHNUNG            PREIS

45           Coffee                 5,60
46           Tea                    2,20

表 2 从 Room 到产品的连接:

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

我的目标是将属于旧行的所有房间 id 的新 id 插入到表 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
4

1 回答 1

1

在触发器中,插入后添加

 SELECT @intNewID = Scope_Identity()  

这将获取新插入产品的 ID

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

这会从已删除的产品中获取链接到旧产品的产品,并复制它们

于 2012-07-18T08:29:27.977 回答