得到对象脚本
发表于:2007-07-02来源:作者:点击数:
标签:
/* 在查询分析器中调用 sql dmo生成脚本--存储过程 邹建 2003.07-----------------*/ /*--调用实例 declare @str varchar(8000) exec sp_getscript @#zj@#,@#@#,@#@#,@#xzkh_sa@#,@#地区资料@#,@str output print @str */ if exists(select 1 from sysobject
/*
在查询分析器中调用
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
原文转自:http://www.ltesting.net