【问题标题】:SQL Server How to copy table data to another table considering the primary key of yet another tableSQL Server如何考虑另一个表的主键将表数据复制到另一个表
【发布时间】:2022-01-04 03:01:20
【问题描述】:

我有 4 张桌子。 Table1 ID 是主键,Table2 ID 是外键。 Table3和Table4基本上是Table1和Table2的档案,主键外键和列是一样的。

1:

ID | Date | Amount

2:

ID | Type

我必须根据 Date 中定义的值将表 1 数据归档到表 3,我使用这个:

Declare @Date date
set @Date = '2021-11-18'
Begin transaction

INSERT INTO dbo.Table3 (ID, Date, Amount)
SELECT *
FROM dbo.Table1
WHERE Date=@Date

执行此代码导致将其添加到 Table3:

52 | 2021-11-18 | 12
53 | 2021-11-18 | 14

问题是我现在如何将 table2 数据归档到 table4?我只需要 table2 中与我们过滤日期的方式相匹配的数据。基本上就是把table2的所有数据复制到table4中,匹配到table3中的ID

【问题讨论】:

  • 这没有意义。表1中的ID是表2的PRIMARY KEY是什么意思?一个PRIMARY KEY 只能存在于它定义它的表中。你所描述的充其量是模糊的。花时间详细说明你的问题;可能没有使用无意义的名称,如“表 1”和“表 3”。还包括 consumable 样本数据和您对所述样本数据的预期结果。
  • @Larnu 谢谢。我同意这是模糊的。我更新了问题。
  • 提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。

标签: sql sql-server archive


【解决方案1】:

我从您的问题陈述中了解到,您需要根据表 3 中的过滤数据集(按日期过滤)从表 2 中插入表 4。

所以你可以做的是一旦数据被插入到你的 Table3 中。您可以根据 Id 将表 3 与 Table2 连接起来,因为表 1 是表 3 的存档,而表 2 Id 是来自表 1 Id 的外键。所以间接地表 2 id 可以与您的表 3 id 具有相同的关系。

INSERT INTO dbo.Table4 (ID, Type)
SELECT T2.ID, T2.Type
FROM dbo.Table2 T2
Inner Join dbo.Table T3
On T2.ID= T3.ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多