DnL*_*DnL 2 sql-server-2008 sql-server t-sql sql-server-2008-r2 sql-server-2014
我正在使用 Tsql 脚本来恢复多个数据库。
RESTORE DATABASE XXX_M
FROM DISK = 'C:\XXX.bak'
WITH FILE = 1, replace
GO
Run Code Online (Sandbox Code Playgroud)
有时 .bak 文件已损坏(不是数据损坏)。
我想知道是否有一种方法可以检查文件是否未损坏,然后进行恢复,否则不会。我尝试在恢复验证后使用@@rowcount,但效果不好。
RESTORE VERIFYONLY
FROM DISK = 'C:\xxx.bak'
if @@ROWCOUNT !=0
print 'false'
else
print 'good'
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?
谢谢。
检查@@ROWCOUNT在这里没有价值,因为RESTORE VERIFONLY不会返回任何结果。它打印状态消息或错误消息。所以,一个简单的TRY/CATCH应该做:
BEGIN TRY
RESTORE VERIFYONLY ...
RESTORE DATABASE ...
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
END CATCH
Run Code Online (Sandbox Code Playgroud)
如果VERIFYONLY失败,它将引发异常,并跳过RESTORE.
当然,仍然存在VERIFYONLY会成功但会RESTORE失败的情况(例如,某些东西突然进入并占用了您的所有磁盘空间)。