当我在SSMS中使用T-SQL恢复具有STATS = 10
选项的数据库时(如下例所示),我在“消息”窗口中每10%打印一次统计信息。我现在想要自动化恢复过程(将VB.Net WinForm应用程序指向备份和事务文件目录并让它恢复所有数据)并希望在标准Windows窗体进度条中报告进度。
RESTORE DATABASE [Databasename] FILE = N'DatabaseName_dat' FROM DISK = N'S:\SQL\Backups\DatabaseName.bak' WITH FILE = 1, MOVE N'AuctionData_dat' TO N'C:\SQL\Data\DatabaseName.mdf', MOVE N'DatabaseName_log' TO N'C:\SQL\Logs\DatabaseName.ldf', NOUNLOAD, REPLACE, STATS = 10
我猜我需要使用某种形式的异步命令,并等待服务器的每个响应更新进度条。到目前为止,我所看到的只有ExecuteReaderAsync,ExecuteNonQueryAsync和ExecuteScalarAsync命令 - 在命令完全完成之前,这些命令都不返回任何细节。
这甚至可能来自.Net吗?
感谢您提供任何帮助或提示
答案 0 :(得分:3)
这本身并不是一个.Net问题。您的问题实际上是"我可以编写SQL脚本来执行还原,然后在还原运行时定期查询其进度吗?"
答案是"是"。在这里查看详细信息:
您必须执行以下操作:
1)启动脚本(您可以手动执行此操作,也可以从WinForms应用程序执行此操作)
2)将会话ID传递给Winforms
3)在winforms应用中添加一个计时器,定期拨打sp_who..
或SELECT command, percent_complete, start_time FROM sys.dm_exec_requests WHERE session_id = ...
并显示"%/ done"图形。
答案 1 :(得分:2)
此查询将为您提供会话的完成百分比。您可以执行此查询并获取percent_complete
值并使用它来更新进度条
SELECT percent_complete
FROM sys.dm_exec_requests
WHERE session_id=<your restore session id>