转:导出SQL Server对象脚本

 转:http://topic.csdn.net/t/20050128/19/3761627.html

 

sp_helptext    ' 要取得脚本的触发器名 '

 

-- 或者:   
   select     text     from    syscomments    where    id = object_id (N ' 要取得脚本的触发器名 ' )  

 

-- 或者用sqldmo对象   
    
  
if     exists ( select     1     from    sysobjects    where    id = object_id ( ' fgetscript ' )    and     objectproperty (id, ' IsInlineFunction ' ) = 0 )   
  
drop     function    fgetscript   
  
go    
    
  
/*--   
  调用sqldmo生成脚本的函数   
    
  --邹建   2003.07(引用请保留此信息)--
*/
   
    
  
/*--调用实例   
  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   
  --
*/
   
  
-- */   
    
  
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    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值