求援 有关sqlserver 的存储过程(不需要很长的代码)在线等.... (200分)

  • 主题发起人 主题发起人 chshanghai
  • 开始时间 开始时间
C

chshanghai

Unregistered / Unconfirmed
GUEST, unregistred user!
我要写这样一个存储过程:
/* 主要功能 输入任何一个数据库名返回数据库存文件的存放路径
过程名: proc_filepath
入口参数: @vdatabase :数据库名
返回值:
@vlfilename: @vdatabase 的*.ldf 存放路径
@vmfilename: @vdatabase 的*.mdf 的存放路径
*/
已有资料
@vdatabase 中 sysfiles 中存放的了这两个文件的存放路径.
俺想了好长时间但就是想不出来
高手帮帮俺吧.


create procedure proc_filepath (@vdatabase varchar(30), @vlfilename varchar(150) out ,@vmfilename varchar(150) out ) as
begin
-- execute ('use ' + @vdatabase)
--go 可惜不能加 go
-- select @vlfilename=rtrim(filename) from sysfiles where rtrim(filename) like '%.ldf'
-- select @vMfilename=rtrim(filename) from sysfiles where rtrim(filename) like '%.mdf'
-- execute('use master')
-- go 同上
end
 
边写边试,啊,光想,不动手怎么能解决啊?
 
to handsome1234
你以为我说想是坐在那空想吗我已经试了一天了还是不行否则我会来问吗?

 
在 query analyzer输入:
use master
sp_helpdb dbname
sp_helptext sp_helpdb
看看你就知了!
 
以下可以滿足你的要求﹗
create procedure proc_filepath @vdatabase varchar(30)
as
begin
execute ('use ' + @vdatabase)
select rtrim(filename) as vlfile from sysfiles where rtrim(filename) like '%.ldf'
select rtrim(filename) as vmfile from sysfiles where rtrim(filename) like '%.mdf'
end
 
ms那个sp_helpdb可以看源码的,自己修改一下吧。
用sp_helptext sp_helpdb 来看sp_helpb存储过程的源码吧
 
谢谢各位捧场:
to hgood
你说的那种方法我试过 不行.
execute( 'use ' +@vdatabase) 这句话在存储过程中没有什么效果. 你最好看看 sql 的帮助.
to gmc001
你说的简直就是废话. 如果可以这样我要写存储过程干吗.(不是针对你本人. 是针对你这句话,抱歉)

欢迎继续讨论.
 
你運行 exec proc_filepah pubs 會返回兩個值﹐如﹕
vlfile
E:/Program Files/Microsoft SQL Server/MSSQL/data/mastlog.ldf
vmfile
E:/Program Files/Microsoft SQL Server/MSSQL/data/master.mdf
還是那創建過程在創建時就不能通過﹖我用mssql 2000
 
不行 我用的是 mssql7
我这里返回的是 'd:/MSSQL7/data/mastlog.ldf' 和 'd:/MSSQL7/data/master.mdf'
所以你的方式可能不行. 我必须在 sql server 7.0下用的
 
能有返回值不就ok了﹗關鍵是你怎么調用它
都不知道你要什么樣的﹖用AdoStordproc的話絕對可以﹐如果是
用存儲過程調用的話可能不行﹗

 
我不是要在delphi 中调用它
我是想写 我是想写个 sql 文件的工具.在查询分析器中执行
 
难道真没有办法吗
 
--創建過程
create procedure proc_filepath (@vdatabase varchar(30), @vlfilename varchar(150) output ,@vmfilename varchar(150) output ) as
begin
execute ('use ' + @vdatabase)
select @vlfilename=rtrim(filename) from sysfiles where rtrim(filename) like '%.ldf'
select @vMfilename=rtrim(filename) from sysfiles where rtrim(filename) like '%.mdf'
end
--調用存儲過程
create procedure show_path
@dbname varchar(30)
as
declare @vl varchar(150),@vm varchar(150)
exec proc_filepath @dbname,@vl output,@vm output
print @vl+'----'+@vm
--win2000 server+sql2000調試通過
 
to hgood
7.0下这样肯定不行
可惜我是7。0没有办法 因为我们用都是7.0 不可能为了这个换数据库 ,不过还是谢谢.分数一会儿加
有其它的办法吗??


 
是創建失敗還是運行失敗還是結里不對﹖7.0我沒有試過﹗想想還有沒有折中的辦法吧﹗
 
你可以先判断Master数据库中是否有你要查找的数据库
if Exists
(Select FileName From Master.dbo.SysDataBases Where Name=DataBaseName)
如果存在你要查找的数据库
你再查找数据库文件和日志文件
Select FileName From DataBaseName.dbo.Sysfiles
 
原来你是不知道怎么去查询其他数据库的数据表
你不用执行Use DataBaseName这种语句
在Sq语法中你可以用如下语法去查询其他数据库中的数据
Select * From DataBaseName.dbo.TableName
知道上面的语法,我想你也应该知道如何处理了
 
用临时表试试
create procedure bb
@DBName varchar(60),
@lFName Varchar(60) output,
@mFName Varchar(60) output
as
begin
create TABLE #MyTempTable (cola varchar(60) )
INSERT INTO #MyTempTable
execute ('
select rtrim(filename) from ' +@DBName +'.dbo.sysfiles where rtrim(filename) like ''%.ldf''')
select @lFName=( select * from #MyTempTable )
delete #MyTempTable
INSERT INTO #MyTempTable
execute ('
select rtrim(filename) from ' +@DBName +'.dbo.sysfiles where rtrim(filename) like ''%.mdf''')
select @mFName=( select * from #MyTempTable )
end
GO
 
后退
顶部