sql server 2008
愿任何人分享他们的专业知识如何实现以下方案
我有两张桌子。活跃和历史都有相同的结构。每当新记录插入活动表时,我想要实现的目标,无论如何 活动表中存在的记录移至历史记录。
我试图只保留当前有效记录
我有一个名为fetch date的列,如果任何记录的提取日期不同 必须将getdate移动到历史表。那些记录不应该出现 在活动表中。
由于
答案 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
你应该注意的几个问题
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注入攻击。