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
答案 0 :(得分:1)
在触发器中,插入后添加
SELECT @intNewID = Scope_Identity()
这将获取新插入产品的ID
INSERT table2 (ProductID, RoomID)
SELECT @intNewID, RoomID
FROM deleted
INNER JOIN table2 on deleted.productid=table2.productid
这会从已删除的产品中获取与旧产品关联的产品,并将其复制