触发器从活动表中删除旧记录并插入历史记录表

时间:2016-03-18 06:50:09

标签: sql sql-server

sql server 2008

愿任何人分享他们的专业知识如何实现以下方案

我有两张桌子。活跃和历史都有相同的结构。

每当新记录插入活动表时,我想要实现的目标,无论如何 活动表中存在的记录移至历史记录。

我试图只保留当前有效记录

我有一个名为fetch date的列,如果任何记录的提取日期不同 必须将getdate移动到历史表。那些记录不应该出现 在活动表中。

由于

1 个答案:

答案 0 :(得分:0)

你有几个语法错误。

我只是在纠正语法

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 

你应该注意的几个问题

  1. SELECT INTO <table name>将创建新表并插入结果。它只会工作一次。然后第二次运行它,它将给出错误,因为目标表已经存在。您应该使用预先创建所有必需的表并使用insert into backup_table ( <column list> ) select <column list> from original_table

  2. 避免使用SELECT *,最佳做法是明确指定列名称

  3. 如果您必须使用动态SQL,请阅读有关它的更多信息。示例:The Curse and Blessings of Dynamic SQL。并注意可能的SQL注入攻击。