【问题标题】:How to create an SQL Trigger which copies the selection from another Table,too?如何创建一个 SQL 触发器来复制另一个表中的选择?
【发布时间】:2012-07-18 08:03:19
【问题描述】:

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

包含产品的表 1:

ID           BEZEICHNUNG            PREIS

45           Coffee                 5,60
46           Tea                    2,20

从 Room 到 Products 的表 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

我的目标是将属于旧行的所有房间 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

【问题讨论】:

    标签: sql sql-server-2008 triggers


    【解决方案1】:

    在触发器中,插入后添加

     SELECT @intNewID = Scope_Identity()  
    

    这将获取新插入产品的 ID

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

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

    【讨论】:

    • 在这种情况下,在 INSERT 语句中添加一个 OUTPUT 子句,然后加入该表。
    • 非常感谢您。你能解释一下你的代码吗?
    猜你喜欢
    • 2013-12-03
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多