Sql server 从代码中回滚SQL Server

Sql server 从代码中回滚SQL Server,sql-server,delphi,Sql Server,Delphi,我想我的问题相当普遍,比如我们正在使用DELPHI和SQL Server在数据库上开发长时间运行的算法。如果这些程序失败,我们需要将数据库设置回初始状态。在服务器端分离数据库,从备份中恢复旧数据库,然后用我们的程序测试重新开始。漫长而耗时的程序 如果测试失败,我是否可以使用Delphi在数据库中设置保存点并从Delphi还原数据库?您可以轻松使用SQL Server的功能实现此目的: 在开始之前创建数据库快照(使用创建数据库快照\u名称….作为数据库快照\u名称) 运行应用程序 如果失败,只需

我想我的问题相当普遍,比如我们正在使用DELPHI和SQL Server在数据库上开发长时间运行的算法。如果这些程序失败,我们需要将数据库设置回初始状态。在服务器端分离数据库,从备份中恢复旧数据库,然后用我们的程序测试重新开始。漫长而耗时的程序


如果测试失败,我是否可以使用Delphi在数据库中设置保存点并从Delphi还原数据库?

您可以轻松使用SQL Server的功能实现此目的:

  • 在开始之前创建数据库快照(使用
    创建数据库快照\u名称….作为数据库快照\u名称

  • 运行应用程序

  • 如果失败,只需从该快照还原(使用
    从数据库还原数据库…\u snapshot='..'


您不能批量运行查询并提交它们吗?我曾经做过类似的事情,但这是复制了大约2000万条记录。所以我所做的是分块读取它们,做需要的事情,做多次插入,然后继续下一个块。唯一额外的是,您需要识别最后插入的记录,这可以通过简单的比较来完成。也许还有其他原因,但这对您来说可行吗?如果您在Delphi中使用
TADOConnection
,您可以这样做:
ADOConnection.beginters;ADOConnection.CommitTrans。关于异常:
ADOConnection.RollbackTrans
。我有点困惑。从文档中:
源数据库更新时,数据库快照也会更新。
。这是真的吗?@kobik:我同意你的困惑——似乎完全违背了数据库快照是SQL Server数据库(源数据库)的只读静态视图这一观点。这段开头的陈述好的,我应该试着做一些编码吗?@Franz:我相信kobik提到的文档要么是错误的,要么是误导性的。我已经非常成功地使用了数据库快照——据我所知,数据库快照是给定时间的静态只读“快照”(因此得名!)。以后对基础数据库的更改不会影响快照。我会继续尝试使用它们——我很有信心它们会对你很好