自动将一个表与另一个表同步(列)

Posted

技术标签:

【中文标题】自动将一个表与另一个表同步(列)【英文标题】:Automatically sync one table with another table (columns) 【发布时间】:2016-04-18 13:11:14 【问题描述】:

我正在使用 SQL Server 2014 Management Studio。我在我的应用程序上添加了一个删除功能,它将从 Table1 中删除一行。它会先将该行插入 Table2,然后从 Table1 中删除。

要获得 Table2 的 Table1 列的副本,我可以这样做:

SELECT * INTO Table2 FROM Table1

但是,有没有办法让 Table2 自动不断地从 Table1 中获取所有列?我问的原因是因为 Table1 将来会添加不同的列,因此必须手动将其复制到 Table2 中会很烦人。谢谢!

【问题讨论】:

你需要触发器来做到这一点,检查这个***.com/questions/9996643/…,当然你可能需要稍微修改一下代码,但这是你问题的解决方案 【参考方案1】:

有几种方法可以做到这一点:

您可以使用触发器来捕获 DELETE 操作 您可以修改DELETE 语句以使用OUTPUT

看起来像这样:

DELETE T1
OUTPUT DELETED.* INTO Table2
FROM Table1 AS T1;

因此,每当您从Table1 中删除某些内容时,这些记录都会添加到Table2

如果Table2 应该是一个存档表,它可能有一个ArchiveDate 列,那么你的语句可能会得到改进,看起来像这样:

DELETE T1
OUTPUT DELETED.*, CURRENT_TIMESTAMP INTO Table2
FROM Table1 AS T1;

当然我不建议在您的 SQL 查询中使用 * 并仔细列出您的列:

DELETE T1
OUTPUT DELETED.Column1, DELETED.Column2, DELETED.Column3, DELETED.Column4, CURRENT_TIMESTAMP
INTO Table2 (Column1, Column2, Column3, Column4, ArchiveDate)
FROM Table1 AS T1;

这样,您将能够知道该特定记录何时被删除。

【讨论】:

那是一个时髦的说法,不知道这是可能的 @Veljko89 现在你做到了! :) 谢谢!我会试试看。 @RockOn 如果Table2 应该是一个存档。您可能在那里有一个 ArchiveDate 列,然后您就会知道删除操作何时完成。我将在我的答案中添加迷你示例。

以上是关于自动将一个表与另一个表同步(列)的主要内容,如果未能解决你的问题,请参考以下文章

将预先连接的表与另一个表合并

sql 在满足特定条件时将一个表与另一个表合并。

如何将一个表与另一个表中的一系列值连接起来?

hibernate jpa将两个表与另一个表连接起来

Oracle SQL 将日期维度表与另一个关于日期值的表连接起来

将主表与另一个表中的所有记录进行比较,以得出主表的列值