触发截断然后插入行

时间:2013-10-06 22:49:49

标签: sql sql-server triggers insert truncate

每天都会有一些行插入SQL Server表(T_PAST)。这些行将是过去(即2013年8月1日)的记录以及将来(即2014年1月1日)的记录。我想在表格中留下过去的日期记录(T_PAST),但是对于未来的日期记录,我想: 1)从原始表中删除它们 2)将它们插入一个只有未来日期记录(T_FUTURE)

的新表中

问题是,未来的日期记录可以在列中进行更改,因此我不想运行更新查询,而是希望截断T_FUTURE表,然后重新插入记录。

在将正确的记录插入T_PAST的意义上,一切都正常工作,从T_PAST中删除正确的记录,并截断T_FUTURE表。我的问题是,当我插入多个未来日期记录时,只有最后一条记录显示在T_FUTURE表中,而不是所有记录。

ALTER TRIGGER [dbo].[trg_GetFuture]
ON [dbo].[T_PAST]
AFTER INSERT
AS

BEGIN
TRUNCATE TABLE dbo.T_FUTURE
END

BEGIN
INSERT INTO dbo.T_FUTURE
SELECT *
FROM INSERTED
WHERE DATE > GETDATE()
END

BEGIN
DELETE FROM dbo.T_PAST
WHERE DATE > GETDATE()
END

谢谢!

1 个答案:

答案 0 :(得分:0)

这是因为您正在截断触发器中的T_FUTURE表。 每次触发触发器时,它将首先截断T_FUTURE表,然后将新记录插入此表。