-----------程序如下-----------------
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
請大家幫忙看看。
uj5u.com熱心網友回復:
補充一點,在查詢分析器中執行成功。uj5u.com熱心網友回復:
你這樣處理下看:1、新建一個standard class,并在select standard class type 中選擇transaction,這時會打開一個宣告函式的視窗
2、在上面的視窗上選擇底部的 Declare instance variables 頁,在變數型別的下拉框中選擇 Local External Functions
3、在空白處右鍵選擇aste -> SQL->remote stored procedure,回出現選擇存盤程序的視窗,選擇即可生成函式
如: CREATE PROCEDURE sp_test (@pinput varchar(10))
AS
return 1000
GO
選擇sp_test的時候生成如下函式宣告
function long sp_test(string pinput) RPCFUNC ALIAS FOR "dbo.sp_test"
4、保存你的物件為:uo_tran
5、雙擊打開應用,選擇additional properties ->variable types,修改SQLCA中的 transaction為uo_tran即可
6、然后你在程式中就可以象使用函式一樣呼叫您的存盤程序,如:
integer li_return
li_return=Sqlca.sp_test('111')
uj5u.com熱心網友回復:
好像沒那么簡單,呵呵.轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/115146.html
標籤:腳本語言
上一篇:求助!給公司編軟體遇上困難
