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

Sql server 从一个存储过程复制到另一个存储过程,sql-server,Sql Server,我有一个名为Sales的表和另一个SalesHistorySalesHistory是Sales表的副本 现在,Sales表可以随时删除,然后重新创建,添加新列,并将旧列重命名为其他列。我编写了一个存储过程,根据需要插入或更新的条件,将数据从sales表复制到saleshistory表 现在我有点不知所措了:如何解决这个问题:一旦删除并重新创建了sales表,如何修改saleshistory表中的更改 如果有任何想法或相同的代码,我可以在需要时从存储过程中共享我的代码,但这非常简单 这是密码 In

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

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

现在我有点不知所措了:如何解决这个问题:一旦删除并重新创建了sales表,如何修改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

我已经在我的问题中解释了我试图做什么

假设在删除表时您正在查找数据

不幸的是,您不能为DDL语句(如drop table)创建INSTEADOF触发器。因此,不能在删除表之前简单地复制数据。但是,您可以在Sales表上创建一个插入后更新触发器,将记录直接插入SalesHistory。这样,当随机删除Sales表时,SalesHistory表中已经有数据

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


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

请分享您的代码以及您遇到的问题。首先,您需要一个名称已更改的列列表。然后您可以使用
sp_rename
,如下例所示:。您当前如何生成脚本来更改
Sales
表?我已经添加了代码,请检查是否更改了
Sales
表中的列名,现在您的SP无法工作,因为该列不存在?这里没有复杂的答案-您只需更改存储过程和/或
SalesHistory
表即可。因此,无论您当前使用什么过程来捕获和迁移对
Sales
的更改,都需要为存储过程和/或
SalesHistory
表包含一个更改脚本。您没有提到是否允许更改
SalesHistory
表。如果没有,您希望如何处理添加的新列?将值保留为空?请澄清以下语句:“现在我有点不知所措了:如何解决删除并重新创建销售表后,如何修改对saleshistory表的更改?”您是指数据更改,还是模式列更改,我也在salesmapping表中存储了名称。那么这是我们可以解决的问题吗