Sql 触发器截断然后插入行

Sql 触发器截断然后插入行,sql,sql-server,triggers,insert,truncate,Sql,Sql Server,Triggers,Insert,Truncate,每天,都会将一些行插入SQL Server表(T_pass)。这些行将是过去(即2013年8月1日)的记录以及未来(即2014年1月1日)的记录。我想将过去日期的记录保留在表中(T_past),但对于未来日期记录,我想: 1) 从原始表中删除它们 2) 将它们插入一个只有未来日期记录的新表(T_future) 问题是,未来日期的记录可能会在列中发生更改,因此,我不希望也运行更新查询,而是希望截断T_future表,然后重新插入记录 一切都是这样工作的:正确的记录被插入到T_pass中,正确的记录

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

问题是,未来日期的记录可能会在列中发生更改,因此,我不希望也运行更新查询,而是希望截断T_future表,然后重新插入记录

一切都是这样工作的:正确的记录被插入到T_pass中,正确的记录被从T_pass中删除,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

谢谢

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

在哪里插入到
T_FUTURE
?提示:您可能需要添加
将@Now声明为DateTime=GetDate(),然后立即使用
@Now
。否则,您可能会遇到一些难以找到的计时错误,因为
GetDate()
的值从
INSERT
更改为
DELETE
。抱歉,输入错误-它现在显示了我插入到T\u FUTURE的位置。还有,谢谢你提醒我申报。是的,我也意识到了。我认为触发器只有在插入所有行之后才会触发,因此它只会截断一次,然后添加所有行,但我猜情况并非如此。有没有办法解决这个问题?