【问题标题】:Move Records from "Active Tables" to "Archive Tables" in SQL Server 2012在 SQL Server 2012 中将记录从“活动表”移动到“存档表”
【发布时间】:2013-10-29 13:37:00
【问题描述】:

自从 SQL 以来,这对我来说很棘手。我有 4 张桌子。我的逻辑问题比我认为的其他任何问题都多。我有一张名为 Vehicle 的桌子。在我的应用程序中,此 Vehicle 表中更改的任何记录都会插入到 VLog 表中。 Vehicle的主键是VehicleID,它与VLog中的VehicleID相关。在 SQL 中,我不确定如何归档这两个表。我有两个存档表。 VehicleArchive 和 VLogArchive。在我的应用程序中,我能够根据某个参数“归档”某些记录。这很简单,因为我使用的是网格视图,并且可以验证 VehicleID 并将具有该 VehicleID 的任何记录插入到 VLogArchive 和 VehicleArchive 中。但是,我将要处理实时记录,并且想知道 SQL 中是否有解决方案。 VLog 中的每个 VehicleID 都有多个记录,因为 VLog 会跟踪 Vehicle 中所做的所有更改。在我的应用程序本身中,单击“更新”按钮时,我可以通过将 VLog 中的记录与网格视图中的 VehicleID 进行比较,然后从 VLog 中删除所述记录并将位置更改为“文件室”,从而将记录插入 VLogArchive。 "然后,只要位置是“文件室”,它就会继续将来自 Vehicle 的记录插入到 VehicleArchive 中,方法是再次将其与网格视图中的 VehicleID 进行比较。这似乎倒退了,但我不得不这样做,因为如果我在从 VLog 中删除相关记录之前尝试从 Vehicle 中删除记录,它不会因为它是相关的而被删除。我不知道如何在 SQL 中执行此方法,并且想知道如果位置位于“文件室”中,是否有人知道如何同时移动所有记录。

我找到了thisthis,但我不肯定这些是我需要的方法。感谢您的帮助!

【问题讨论】:

    标签: asp.net sql sql-server gridview


    【解决方案1】:

    我不同意@Richard。如果可能的话,我总是倾向于让你的桌子保持“精简和刻薄”。如果数据是旧的/未使用的,请将其从生产表中取出!在事务表中保留不必要的记录会带来许多性能和维护风险。由于您将在您运行的每个选择查询中包含对该标志的检查(使用@Richard 建议的视图),您将不得不将该标志添加到每个非聚集索引以避免 tipping point 问题。您还将遇到执行唯一约束的问题(如果您的数据库设计正确)以及使查询更容易出错(如果有人编写报告但不使用视图怎么办?)。像这样的元数据标志的问题列表一直在继续。只是不要这样做。

    有很多不同的方法可以在归档数据上剥洋葱。我自己更喜欢更频繁和更小的交易。如果您要归档到同一台服务器,请在第一个链接中使用 T-SQL。如果要归档到不同的服务器,请使用 SSIS。

    【讨论】:

    • 我并不反对这种方法——它是(归档的)操作频率和数据大小之间的平衡。我通常倾向于先使用最简单的方法,然后再进行改进。归档数据有缺点(复杂性、包含在历史报告中的能力等);这意味着在实施不同的表策略之前需要仔细考虑。删除或移动最小值;除非您有数千万条记录并且需要查询所有记录。
    【解决方案2】:

    不要那样做;将归档的 int(1) 字段添加到表中并使用它来过滤视图。

    然后将其用作 gridview 的源

    SELECT * FROM Vehicle WHERE Archived=0
    

    要存档记录,您可以这样做

    UPDATE Vehicle SET Archived=1 WHERE ID=1
    

    在生产系统上移动这样的记录绝非易事,而且几乎肯定会导致比您想象的更多的问题。

    如果你真的想这样做;那么你将不得不逐条记录;通过复制数据;当然,如果任何其他表引用 Vehicle,这将破坏您必须手动修复的引用完整性。

    您可以在代码中作为后台过程执行此操作,也可以(更好)在数据库服务器上使用 SQL / SSIS

    【讨论】:

    • 是的,在我的存档表中,我确实使用了 ArchiveID。我只是不确定如何一次将 SQL Server 中的记录全部移动到存档表中。我知道我可以通过重新更新“文件室”中的所有记录在应用程序本身中手动完成,但我希望将手动过程排除在外。
    猜你喜欢
    • 2016-06-13
    • 2018-12-01
    • 2013-04-10
    • 2021-11-09
    • 1970-01-01
    • 2013-05-07
    • 2019-03-30
    • 2011-02-07
    • 2017-08-23
    相关资源
    最近更新 更多