触发器从活动表中删除旧记录并插入历史表
Posted
技术标签:
【中文标题】触发器从活动表中删除旧记录并插入历史表【英文标题】:Trigger To delete Old Records from active table and Insert to history table 【发布时间】:2016-03-18 06:50:09 【问题描述】:sql server 2008
任何人都可以分享他们的专业知识如何实现以下场景
我有两张桌子。 active 和 history 都具有相同的结构。
每当新记录插入活动表时,我想要实现的目标,无论如何 活动表中存在的记录移至历史记录。
我试图只保留当前的活动记录
我有一个名为获取日期的列,如果任何记录的获取日期不同 因为 getdate 必须移动到历史表。那些记录不应该出现 在活动表中。
谢谢
【问题讨论】:
获取日期可能不必等于插入点的 getdate。也许您可以发布一些示例和预期结果 您的实际意图是什么?您是否正在寻找一种方法来获取表中的最新记录? @Squirrel :只想保存活动表中最后一次加载的记录。保留历史表中的所有记录 暂存表?为什么不只是 1)从活动中插入历史选择 2)截断活动表 @Squirrel:请详细说明.. 【参考方案1】:你有几个语法错误。
我只是在纠正语法
CREATE PROCEDURE BACKUP_TB
@tbname varchar(MAX)
AS
BEGIN
SET nocount ON;
DECLARE @query varchar(MAX)
SET @query = 'select * into '+ @tbname + '_backup from ' + @tbname + '';
EXEC (@query)
SET nocount OFF;
END
你应该注意的几个问题
SELECT INTO <table name>
将创建新表并插入结果。它只会工作一次。然后第二次运行它,它会给出错误,因为目标表已经存在。您应该使用预先创建所有必要的表并使用insert into backup_table ( <column list> ) select <column list> from original_table
避免使用SELECT *
,最好明确指定列名
如果您必须使用动态 SQL,请阅读有关它的更多信息。示例:The Curse and Blessings of Dynamic SQL。并注意可能的 SQL 注入攻击。
【讨论】:
非常感谢松鼠以上是关于触发器从活动表中删除旧记录并插入历史表的主要内容,如果未能解决你的问题,请参考以下文章