|
/* 在查询分析器中调用sqldmo生成脚本--存储过程
邹建 2003.07-----------------*/
/*--调用实例 declare @str varchar(8000) exec sp_getscript 'zj','','','xzkh_sa','地区资料',@str output print @str */ if exists(select 1 from sysobjects where id=object_id('sp_getscript') and objectproperty(id,'IsProcedure')=1) drop procedure sp_getscript go create procedure sp_getscript @servername varchar(50) --服务器名 ,@userid varchar(50) --用户名,如果为nt验证方式,则为空 ,@password varchar(50) --密码 ,@databasename varchar(50) --数据库名称 ,@objectname varchar(250) --对象名 ,@re varchar(8000) output --返回脚本 as 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
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 select 错误号=@re, 错误源=@src, 错误描述=@desc return
go
|