我使用如下SQL语句在Delphi7+SQL Server 2005中从备份文件(作为参数从外部传入)恢复数据库.(全部替换,不需要保留原库记录)
数据库管理员,使用windows授权方式访问
但是同样的代码在'SQL Server Management Studio'中可以恢复数据库(主要失败的原因是无法独占打开数据库,导致恢复失败)
而在Delphi执行期,执行语句不会报错,但是数据库并没有恢复.请教各位大侠:
1.正确的恢复数据库的方法是不是这样的?
2.如果这个方法正确,是否是因为无法独占打开数据库而导致恢复数据库失败?那么有没有方法从ADO数据接口获取数据库独占访问方式
3."而在Delphi执行期,执行语句不会报错,但是数据库并没有恢复",用什么方法可以获取SQL Server 2005返回的错误信息?---------------
USE MasterDECLARE @DBName nvarchar(50)
DECLARE @BakFile nvarchar(1000)set @DBName = '[Layout]'
set @BakFile = N'%s'--备份的路径RESTORE DATABASE @DBName
FROM DISK = @BakFile
WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE
数据库管理员,使用windows授权方式访问
但是同样的代码在'SQL Server Management Studio'中可以恢复数据库(主要失败的原因是无法独占打开数据库,导致恢复失败)
而在Delphi执行期,执行语句不会报错,但是数据库并没有恢复.请教各位大侠:
1.正确的恢复数据库的方法是不是这样的?
2.如果这个方法正确,是否是因为无法独占打开数据库而导致恢复数据库失败?那么有没有方法从ADO数据接口获取数据库独占访问方式
3."而在Delphi执行期,执行语句不会报错,但是数据库并没有恢复",用什么方法可以获取SQL Server 2005返回的错误信息?---------------
USE MasterDECLARE @DBName nvarchar(50)
DECLARE @BakFile nvarchar(1000)set @DBName = '[Layout]'
set @BakFile = N'%s'--备份的路径RESTORE DATABASE @DBName
FROM DISK = @BakFile
WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE
解决方案 »
- SendMessage的简单问题!!!
- 木子伟来了
- 控件聚焦问题?
- 请教:DELPHI7里如何将文本(不是文本文件)读取和写入SQL SERVER里的TEXT类型数据。
- CSDN上的编辑不会这么差吧?
- 在线等待:请教一个关于用Qreport进行报表制作的问题,请朋友帮忙,欢迎交流讨论。
- 请问谁知道怎么替换字符串
- 在线等待;立即结贴。
- 如何使用代码实现主从表的连接?(急)
- 不使用ClientDataset.applyupdate更新数据,而把Clentdataset.delta作为一个参数传到控制对象的方法updata(data:varient)中为什么只能更新一次
- 【泰坦散分贴】星期三
- Merry Christmas
2、建议将恢复的SQL写成存储过程,在程序上调用,应该就可以了。
这里有一个通用的存储过程,你可以参考一下
1、除去了自己的,杀掉所有连接
2、恢复数据库要用recovery参数1中对应的ADOQ的执行语句是:
declare @spid varchar(20);
declare #spid cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id('Layout');
open #spid;
fetch next from #spid into @spid;
while @@fetch_status = 0
begin
if (cast(@@SPID as varchar(20)) != @spid) --这个条件是我加的(ADOQ不能杀死自己的连接,但是在MS SQL Studio中可以),其他的来自邹建 2003.10的作品
exec('kill '+@spid);
fetch next from #spid into @spid;
end;
close #spid;
deallocate #spid;
2中对应的ADOQ的执行语句是:
use masterRESTORE DATABASE Layout
FROM DISK='%s'
WITH FILE=1, REPLACE, RECOVERY;因为运行场合较为简单,没有使用存储过程恢复数据了再次感谢各位的参与,散分