存储过程从一个复制到另一个

时间:2016-10-04 02:59:45

标签: sql-server

我有一个名为Sales的表和另一个SalesHistorySalesHistorySales表的副本。

现在可以随时删除Sales表,并在添加新列并将旧列重命名为不同的列时重新创建。我编写了一个存储过程,根据条件(如果需要插入或更新)将数据从sales表复制到saleshistory

现在我有点迷失:如何解决一旦销售表被删除并重新创建的问题,我该如何将这些更改修改为saleshistory表?

任何想法或相同的代码,如果需要,我可以从存储过程中共享我的代码,但这很简单

这是代码

Insert into SalesHistory (Cusip, KeyFeatures1, KeyFeatures2, KeyFeatures3, KeyFeatures4, KeyFeatures5, KeyFeatures6, KeyFeatures7, KeyRisks1, KeyRisks2, KeyRisks3, Comments1, Comments2, Comments3)
    select 
        Cusip, KeyFeatures1, KeyFeatures2, KeyFeatures3, KeyFeatures4, 
        KeyFeatures5, KeyFeatures6, KeyFeatures7, KeyRisks1, KeyRisks2, 
        KeyRisks3, Comments1, Comments2, Comments3 
    from 
        Sales 
    where 
        not exists (SELECT 1 FROM SalesHistory WHERE cusip  = Sales.cusip)

UPDATE Hist 
SET Cusip  = A.Cusip,
    KeyFeatures1 = A.KeyFeatures1,
    KeyFeatures2 = A.KeyFeatures2,
    KeyFeatures3 = A.KeyFeatures3,
    KeyFeatures4 = A.KeyFeatures4,
    KeyFeatures5 = A.KeyFeatures5,
    KeyFeatures6 = A.KeyFeatures6,
    KeyFeatures7 = A.KeyFeatures7,
    KeyRisks1 = A.KeyRisks1,
    KeyRisks2 = A.KeyRisks2,
    KeyRisks3 = A.KeyRisks3,
    Comments1 = A.Comments1,
    Comments2 = A.Comments2,
    Comments3  = A.Comments3
FROM  
    SalesHistory Hist 
INNER JOIN 
    Sales A ON A.cusip  = Hist.cusip

我已经在我的问题中解释了我想要做什么

1 个答案:

答案 0 :(得分:0)

假设您在删除表格时追踪数据......?

不幸的是,你无法为drop table等DDL语句创建一个触发器而不是触发器。因此,您无法在删除表之前简单地复制数据。但是,您可以在Sales表上创建一个After Insert,Update触发器,直接将记录插入SalesHistory。这样,当随机删除Sales表时,您将拥有SalesHistory表中的数据。

注意:请注意触发器,因为它们会根据您的应用程序产生不需要的结果。此外,如果您无法控制Sales表的架构,那么您将发现很难将所有列的表数据复制到SalesHistory表,并确保它在应用程序的生命周期内有效。

但是,如果Sales表中的预定义列表永远不会更改,那么您可以执行所需的操作,只需复制那些永不更改的列。