在查询分析器中调用sqldmo生成脚本--函数
2004-08-11 15:10
567 查看
/*?
?????????? 在查询分析器中调用sqldmo生成脚本--函数?
?
/*--调用实例?
?????????? print? dbo.fgetscript('zj','','','xzkh_sa','syscolumns')?
?
/*--得到所有对象的脚本?
declare? @name? varchar(250)?
declare? #aa? cursor? for?
?????????? select? name? from? sysobjects? where? xtype? not? in('S','PK','D','X','L')?
open? #aa?
fetch? next? from? #aa? into? @name?
while? @@fetch_status=0?
begin?
?????????? print? dbo.fgetscript('zj','','','xzkh_sa',@name)?
?????????? fetch? next? from? #aa? into? @name?
end?
close? #aa?
deallocate? #aa?
--*/?
*/?
print? dbo.fgetscript('gisweb','sa','','hf','sct_sb_dyhgq')
if? exists(select? 1? from? sysobjects? where? id=object_id('fgetscript')? and? objectproperty(id,'IsInlineFunction')=0)?
?????????? drop? function? fgetscript?
go?
?
create? function? fgetscript(?
?????????? @servername? varchar(50)??????????????????????????????????????????????????????????? --服务器名?
?????????? ,@userid? varchar(50)='sa'??????????????????????????????????????????????? --用户名,如果为nt验证方式,则为空?
?????????? ,@password? varchar(50)=''??????????????????????????????????????????????? --密码?
?????????? ,@databasename? varchar(50)??????????????????????????????????????????????? --数据库名称?
?????????? ,@objectname? varchar(250)??????????????????????????????????????????????? --对象名?
?
)? returns? varchar(8000)?
as?
begin?
?????????? declare? @re? varchar(8000)??????????????????????????????????????????????????????????????????????????????????????????????? --返回脚本?
?????????? declare? @srvid? int,@dbsid? int??????????????????????????????????????????????????????????????????????????????????? --定义服务器、数据库集id?
?????????? declare? @dbid? int,@tbid? int??????????????????????????????????????????????????????????????????????????????????????????????? --数据库、表id?
?????????? declare? @err? int,@src? varchar(255),? @desc? varchar(255)??????????? --错误处理变量?
?
--创建sqldmo对象?
?????????? exec? @err=sp_oacreate? 'sqldmo.sqlserver',@srvid? output?
?????????? if? @err<>0? goto? lberr?
?
--连接服务器?
?????????? if? isnull(@userid,'')=''? --如果是? Nt验证方式?
?????????? begin?
?????????????????????? exec? @err=sp_oasetproperty? @srvid,'loginsecure',1?
?????????????????????? if? @err<>0? goto? lberr?
?
?????????????????????? exec? @err=sp_oamethod? @srvid,'connect',null,@servername?
?????????? end?
?????????? else?
?????????????????????? exec? @err=sp_oamethod? @srvid,'connect',null,@servername,@userid,@password?
?
?????????? if? @err<>0? goto? lberr?
?
--获取数据库集?
?????????? exec? @err=sp_oagetproperty? @srvid,'databases',@dbsid? output?
?????????? if? @err<>0? goto? lberr?
?
--获取要取得脚本的数据库id?
?????????? exec? @err=sp_oamethod? @dbsid,'item',@dbid? output,@databasename?
?????????? if? @err<>0? goto? lberr?
?
--获取要取得脚本的对象id?
?????????? exec? @err=sp_oamethod? @dbid,'getobjectbyname',@tbid? output,@objectname?
?????????? if? @err<>0? goto? lberr?
?
--取得脚本?
?????????? exec? @err=sp_oamethod? @tbid,'script',@re? output?
?????????? if? @err<>0? goto? lberr?
?
?????????? --print? @re?
?????????? return(@re)?
?
lberr:?
?????????? exec? sp_oageterrorinfo? NULL,? @src? out,? @desc? out???
?????????? declare? @errb? varbinary(4)?
?????????? set? @errb=cast(@err? as? varbinary(4))?
?????????? exec? master..xp_varbintohexstr? @errb,@re? out?
?????????? set? @re='错误号:? '+@re?
?????????????????????????????????? +char(13)+'错误源:? '+@src?
?????????????????????????????????? +char(13)+'错误描述:? '+@desc?
?????????? return(@re)?
end?
go
?????????? 在查询分析器中调用sqldmo生成脚本--函数?
?
/*--调用实例?
?????????? print? dbo.fgetscript('zj','','','xzkh_sa','syscolumns')?
?
/*--得到所有对象的脚本?
declare? @name? varchar(250)?
declare? #aa? cursor? for?
?????????? select? name? from? sysobjects? where? xtype? not? in('S','PK','D','X','L')?
open? #aa?
fetch? next? from? #aa? into? @name?
while? @@fetch_status=0?
begin?
?????????? print? dbo.fgetscript('zj','','','xzkh_sa',@name)?
?????????? fetch? next? from? #aa? into? @name?
end?
close? #aa?
deallocate? #aa?
--*/?
*/?
print? dbo.fgetscript('gisweb','sa','','hf','sct_sb_dyhgq')
if? exists(select? 1? from? sysobjects? where? id=object_id('fgetscript')? and? objectproperty(id,'IsInlineFunction')=0)?
?????????? drop? function? fgetscript?
go?
?
create? function? fgetscript(?
?????????? @servername? varchar(50)??????????????????????????????????????????????????????????? --服务器名?
?????????? ,@userid? varchar(50)='sa'??????????????????????????????????????????????? --用户名,如果为nt验证方式,则为空?
?????????? ,@password? varchar(50)=''??????????????????????????????????????????????? --密码?
?????????? ,@databasename? varchar(50)??????????????????????????????????????????????? --数据库名称?
?????????? ,@objectname? varchar(250)??????????????????????????????????????????????? --对象名?
?
)? returns? varchar(8000)?
as?
begin?
?????????? declare? @re? varchar(8000)??????????????????????????????????????????????????????????????????????????????????????????????? --返回脚本?
?????????? declare? @srvid? int,@dbsid? int??????????????????????????????????????????????????????????????????????????????????? --定义服务器、数据库集id?
?????????? declare? @dbid? int,@tbid? int??????????????????????????????????????????????????????????????????????????????????????????????? --数据库、表id?
?????????? declare? @err? int,@src? varchar(255),? @desc? varchar(255)??????????? --错误处理变量?
?
--创建sqldmo对象?
?????????? exec? @err=sp_oacreate? 'sqldmo.sqlserver',@srvid? output?
?????????? if? @err<>0? goto? lberr?
?
--连接服务器?
?????????? if? isnull(@userid,'')=''? --如果是? Nt验证方式?
?????????? begin?
?????????????????????? exec? @err=sp_oasetproperty? @srvid,'loginsecure',1?
?????????????????????? if? @err<>0? goto? lberr?
?
?????????????????????? exec? @err=sp_oamethod? @srvid,'connect',null,@servername?
?????????? end?
?????????? else?
?????????????????????? exec? @err=sp_oamethod? @srvid,'connect',null,@servername,@userid,@password?
?
?????????? if? @err<>0? goto? lberr?
?
--获取数据库集?
?????????? exec? @err=sp_oagetproperty? @srvid,'databases',@dbsid? output?
?????????? if? @err<>0? goto? lberr?
?
--获取要取得脚本的数据库id?
?????????? exec? @err=sp_oamethod? @dbsid,'item',@dbid? output,@databasename?
?????????? if? @err<>0? goto? lberr?
?
--获取要取得脚本的对象id?
?????????? exec? @err=sp_oamethod? @dbid,'getobjectbyname',@tbid? output,@objectname?
?????????? if? @err<>0? goto? lberr?
?
--取得脚本?
?????????? exec? @err=sp_oamethod? @tbid,'script',@re? output?
?????????? if? @err<>0? goto? lberr?
?
?????????? --print? @re?
?????????? return(@re)?
?
lberr:?
?????????? exec? sp_oageterrorinfo? NULL,? @src? out,? @desc? out???
?????????? declare? @errb? varbinary(4)?
?????????? set? @errb=cast(@err? as? varbinary(4))?
?????????? exec? master..xp_varbintohexstr? @errb,@re? out?
?????????? set? @re='错误号:? '+@re?
?????????????????????????????????? +char(13)+'错误源:? '+@src?
?????????????????????????????????? +char(13)+'错误描述:? '+@desc?
?????????? return(@re)?
end?
go
相关文章推荐
- shell脚本中实现脚本a里面的函数调用脚本b中的函数参数-用到source关键字
- bash脚本之函数简单介绍、应用及函数的简单递归调用
- 利用堆栈回溯、addr2line和Graphviz生成运行时函数调用图
- 正则表达式的运用—— 一键删除Loadrunner录制脚本时生成的无关函数
- 脚本——生成验证码的函数
- linux 为崩溃的程序生成core文件的相关函数,调用代码生成core dump file 但程序不用退出,gdb 分析core
- shell脚本中函数调用的返回值,以及退出状态问题
- 将表中的数据生成SQL脚本,在查询分析器中执行这些脚本后自动将数据导入到SQL Server中
- 脚本语言间的函数调用
- 多个脚本调用同一个函数的方法
- 用callgraph生成的两张函数调用关系图
- 调用脚本内函数
- Lua 脚本调用 C 函数
- 使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
- fork()调用的一个趣题--fork函数能生成几个子进程???
- ASP利用Stream方式生成静态页 [函数可重复调用,简单易用]
- C语言调用Python脚本中的函数
- 同一脚本中的函数和调用
- [NET]Net中的反射使用入门(根据类名和函数名,生成和调用对象的成员函数) (转)
- c++与js脚本交互,C++调用JS函数/JS调用C++函数