gpt4 book ai didi

sql - 如何定期将一组表中的数据复制到另一组表中

转载 作者:行者123 更新时间:2023-12-03 03:59:37 27 4
gpt4 key购买 nike

在 sql server 2008 数据库中,我有一组表,我想定期保存其历史记录。为此,我创建了另一组表来存储此历史记录。基本上,数据库结构如下所示:

+---------------+                +---------------+
| TableA | | TableAHistory |
+---------------+ +---------------+
| Key |<--+ | Key |<----+
| DataA | | | Date | |
| | | | DataA | |
+---------------+ | +---------------+ |
| |
+---------------+ | +-----------------+ |
| TableB | | | TableBHistory | |
+---------------+ | +-----------------+ |
| Key | | | Key | |
| TableAKey |---+ | TableAHistoryKey|---+
| DataB | | DataB |
+---------------+ +-----------------+

使用这种结构,我在创建一个可以将当前数据复制到历史表中的存储过程时遇到了麻烦。我可以轻松创建将数据从 TableA 复制到 TableAHistory 的插入语句,但复制 TableB 的数据给我带来了问题。将数据复制到 TableBHistory 时,我不知道如何找到 TableAHistoryKey 应该是什么。这是插入语句现在的样子:

INSERT      TableAHistory([Date], DataA)
SELECT CONVERT(DATE, DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE())),
DataA
FROM TableA

INSERT TableBHistory([TableAHistoryKey], DataB)
SELECT ??? AS TableAHistoryKey,
DataB
FROM TableB

我唯一能想到的就是在历史表上添加一个字段来临时存储相应表的键。然后,我可以在第二个插入语句中加入 TableA、TableAHistory 和 TableB,从而访问正确的 TableAHistoryKey。我宁愿不这样做,因为这个添加的列仅用于复制数据。

还有其他(常见)方法可以做到这一点吗?

编辑:为了澄清一点,TableAHistory 中的 Key 已生成,与 TableA 中的 Key 不同。 TableBHistory 和 TableB 也是如此。

编辑:目前,此历史记录只需按月保存,我们有一个惯例,将“月/年”存储为该月第一天的日期。因此出现了奇怪的 CONVERT(DATE, DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE()))。可能不是最好的方法,但它确实有效。

最佳答案

我希望您的存档表使用与 prod 相同的架构,但引入 archiveID 作为每个表(包括 tableBHistory)中 PK 的一部分。

那么从特定归档集中恢复行应该很容易。

关于sql - 如何定期将一组表中的数据复制到另一组表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com