嗨我&#39;我想知道有没有办法在SQL服务器中创建表的回滚副本,以防万一我做错了插入或更新语句我想恢复我在插入或更新语句之前的数据。< / p>
答案 0 :(得分:0)
假设我们正在讨论生产环境和工作量:我对这个问题/要求的思考越多,我认为回滚就越是最好的答案。
总结已经提出的建议:
选择进入创建备份表将创建表的副本,但如果您还原到它,则可能会丢失来自其他用户或批次的数据。
使用select或update语句中的into子句将获得更改的行,但不会获得原始值。
另一个答案是创建一个审计表并使用触发器来填充它。您的审计表需要包含有关批处理的足够详细信息,以便识别它以进行回滚。这可能最终成为一个兔子洞。在基表和审计表上触发后,您将需要创建代码以使用此审计表来还原批处理。触发器可能会成为性能问题,如果数据库有足够的其他用户进行了更改,那么您仍然无法在不丢失其他用户的情况下还原批处理。工作
您可以将更新和验证代码包装在同一个proc中,如果验证失败,则只会回滚您的更改。
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/begin-transaction-transact-sql
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/rollback-transaction-transact-sql