当前位置: 首页 > 知识库问答 >
问题:

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

郎祯
2023-03-14

我有一个名为sales的表和另一个saleshistory的表。SalesHistorySales表的副本。

现在,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

共有1个答案

归誉
2023-03-14

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

不幸的是,您不能为DDL语句(如drop TABLE)创建instead of触发器。所以不能在删除表之前简单地复制数据。但是,您可以在Sales表上创建一个After Insert,Update触发器,该触发器直接将记录插入到SalesHistory中。这样,当随机删除Sales表时,SalesHistory表中就已经有了数据。

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

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

 类似资料:
  • 问题内容: 我有一个需要很多参数的插入存储过程-其中2个是@ FirstName,@ LastName。我还有一个更新存储过程,该过程需要许多参数-其中2个是@ FirstName,@ LastName。 我想做的是,从插入SP内部完成之后,调用更新SP并将其发送给@ FirstName,@ LastName。 我不知道这样做的正确语法;我试过了: 但我认为这是错误的。 有人可以告诉我怎么写这个电

  • 问题内容: 上周,我创建了一个Github存储库,却忘记选择该存储库的许可证。现在已经有3个大型提交。 我问了3个贡献者是否还可以,是否删除了回购文件,然后使用相同的名称再次创建它,这一次在创建回购文件时选择了许可证,他们对此有何看法。 题 有没有一种方法可以将提交提交到新的存储库中(这次第一次提交是LICENSE文件),并且仍然保留提交元信息? 问题答案: 有没有一种方法可以将提交提交到新的存储

  • 问题:我想从谷歌云存储桶中的文件夹(例如桶1中的文件夹1)复制文件到另一个桶(例如桶2)。我找不到任何谷歌云存储的气流操作员来复制文件。

  • 我使用以下代码将文件从一个桶复制到另一个桶 但是我总是得到“com . Amazon AWS . services . S3 . model . Amazon S3 exception:Access Denied(服务:亚马逊S3;状态代码:403;错误代码:拒绝访问;请求ID: B6466D562B6988E2)“`作为回应,原因可能是什么

  • 需要帮助编写存储过程,以便将数据从一个表复制到多个表。下面是场景示例: > table1有10列20行数据。

  • 我正在尝试使用Node将文件从AWS S3存储桶复制到另一个存储桶。问题是,如果文件名没有空格,例如:“abc.csv”,它就可以正常工作。但如果我要复制到的文件名中有空格,例如:“abc xyz.csv”。它抛出了下面的错误。 “指定的密钥不存在。”“NoSuchKey:指定的密钥不存在。应请求。extractError(d:\Projects\Other\testproject\s3filet