【问题标题】:How don't submit in a database but select the modified data如何不在数据库中提交而是选择修改后的数据
【发布时间】:2015-09-18 12:03:23
【问题描述】:

我有一个包含多个表的数据库

并且用户可以更改表中的数据。

我的问题是,在用户单击“保存”按钮之前,我不会在数据库中进行任何更改,即使他这样做了 - 它只提交他决定保存的表

但与此同时,用户必须能够看到他所做的所有更改。并且每个“选择”都必须给他修改后的数据,而不是基础数据。

如何一方面不提交数据库中的数据,另一方面将修改后的数据显示给用户?

我想做一个事务并且不提交,(并且使用未提交的读取)但是我不能关闭连接(如果我在没有提交的情况下关闭 - 所有更改都被取消)并且我没有不会打开几个连接。

我还想建立一个所有更改的列表,并且每当用户进行选择时 - 首先从列表中搜索。但它很复杂,我更喜欢简单的解决方案

谢谢

【问题讨论】:

    标签: sql-server transactions submit read-uncommitted


    【解决方案1】:

    这将是非常难以处理,因为您坚持不能使用交易。

    我能建议的最好方法是在每个表中添加列以表示状态 - 但即便如此,您如何确保 user看到预更改和 userB 发布但尚未提交。

    也许您可以查看使用两个表并根据需要从两个表中选择相关数据的视图。

    无论哪种方式,这都是一种令人讨厌的方式,而且性能也不是很好。

    你坚持不能使用交易的那一刻,就是你剥夺了任何简单回答的机会的那一刻。

    临时表在这里没有用(如上所述),因为它与您声明关闭的连接相关联。唯一的替代临时表解决方案是全局临时表,但这也会导致问题(谁创建它,如果您是使用它的最后一个连接怎么办,检查它是否存在等)

    【讨论】:

    • 我没有“坚持”任何事情,如果我能用 tanscaction 完成这项工作 - 格格!但是怎么做?
    • 然后在用户按下保存时保持连接打开并提交事务。如果他们退出关闭事务并且更改将被回滚,如果应用程序断开连接也是如此。
    • 我想我不能让连接保持打开状态。因为没有足够的连接,它会崩溃。如果您建议这是更好的解决方案 - 我会尝试
    • Sql 可以支持 32,767 个活动连接,具体取决于它的配置方式和内存量。
    【解决方案2】:

    您可以使用临时表来存储临时数据,然后在需要时移动它们。

    【讨论】:

    • 这意味着我必须将所有表复制到内存中。不?如果是这样 - 我不能使用它(太大的数据)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2017-04-09
    • 2021-11-29
    • 1970-01-01
    • 2019-07-28
    • 2019-12-12
    相关资源
    最近更新 更多