我有一個觸發器,當一個表上有一個更新,插入或刪除,這個表通過PK/FK 1對1關係連接到另一個表。sql server - 觸發從2個表中複製行
當U,I或D出現時,我正在從TableA複製rowX。我希望它同時從TableB複製rowX。
如何做到這一點?
USE [Database]
GO
/****** Object: Trigger [dbo].[archiveTable] Script Date: 14/01/2014 3:48:08 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[archiveTable] ON [dbo].[TableA]
AFTER INSERT,UPDATE,DELETE
AS
DECLARE @HistoryType char(1) --"I"=insert, "U"=update, "D"=delete
DECLARE @Id INT
SET @HistoryType=NULL
SET @Id=NULL
IF EXISTS (SELECT * FROM INSERTED)
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
--UPDATE
SET @HistoryType='U'
END
ELSE
BEGIN
--INSERT
SET @HistoryType='I'
END
--handle insert or update data
INSERT INTO [database2].[dbo].[tableA]
(column1, column2, ...)
SET @Id=INSERTED.column5
SELECT
GETDATE(), @HistoryType,
column1, column2, ...
FROM INSERTED
JOIN tableB ON INSERTED.column5 = table5.column1
INSERT INTO [database2].[dbo].[tableB]
(column1, column2, column3, ...)
SELECT
GETDATE(), @HistoryType,
column1, column2, column3, ....
FROM jobdtl WHERE column1 = INSERTED.column5
END
ELSE IF EXISTS(SELECT * FROM DELETED)
BEGIN
--DELETE
SET @HistoryType='D'
same as above except for delete
END
我猜我需要一個內部連接的地方或者我需要一個變量來獲得@job_id以便它知道相關信息從第二表複製?
編輯 - 從它的外觀我需要以某種方式使用SCOPE_IDENTITY(),但它沒有采取事務的job_id它採取事務的實際ID(即1,2,3等,而我需要它是動態的,因爲job_id可能是54,634,325等)
當你插入tableA時,你真的想加入tableB嗎?什麼是table5和jobdtl?此外,INSERTED/DELETED表可能包含多個記錄... –