在查询分析器中调用sqldmo生成脚本--函数

/*?
?????????? 在查询分析器中调用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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值