pb中调用存储过程问题。请高手帮忙看看。
-----------过程如下-----------------
ALTER proc proc_restoredata
@bkfilepath varchar(200),@database_name varchar(100),@ls_err varchar(200) output
as
begin
declare @data_lname varchar(100)
declare @log_lname varchar(100)
declare @data_path varchar(500)
declare @log_path varchar(500)
create table #t(logicalname nvarchar(200),
physicalname nvarchar(200),
type varchar(10),
filegroupname varchar(20),
size bigint,
maxsize bigint)
insert into #t exec('RESTORE FILELISTONLY FROM DISK = N''' + @bkfilepath + '''')
if @@error<>0 or (@@rowcount <= 0)
begin
set @ls_err=@bkfilepath+' 不是有效的数据库备份文件!'
return -1
end
select @data_lname=logicalname from #t where type='D'
select @log_lname=logicalname from #t where type='L'
select @data_path=rtrim(reverse(filename)) from sysdatabases where name=@database_name
if (@data_path is null)
begin
set @ls_err='数据库中没有名为 '+@database_name+' 的数据库'
return -1
end
select @data_path=reverse(substring(@data_path,charindex('\',@data_path),200))
commit;
set @log_path= @data_path+@log_lname+'.ldf'
set @data_path= @data_path+@data_lname+'.mdf'
declare @sqlstring varchar(2000)
set @sqlstring='RESTORE DATABASE '+ @database_name +
' FROM DISK = '''+ @bkfilepath +'''
WITH MOVE '''+ @data_lname + '''
TO '''+@data_path+''',MOVE ''' + @log_lname + '''
TO '''+@log_path+''''
exec(@sqlstring)
if @@error<>0 or (@@rowcount <= 0)
begin
set @ls_err='恢复数据库失败!'
return -1
end
set @ls_err=''
return 1
end
-----------调用如下-----------------
DECLARE restore_proc PROCEDURE FOR proc_restoredata
@bkfilepath=:bkfilepath,
@database_name=:_DbName,
@sqlstring=:ls_err output
using sqlca;
execute restore_proc;
fetch restore_proc into :ls_err;
close restore_proc;
执行到execute restore_proc;这一步时
sqlerrtext的内容为:@sqlstring 不是过程 proc_restoredata 的参数。
执行到execute restore_proc;这一步时
sqlerrtext的内容为:Cursor is not open
最后是:Procedure has not been executed or has no results
请大家帮忙看看。