转:导出SQL Server对象脚本

本文介绍三种在 SQL Server 中获取特定触发器或对象脚本的方法,包括使用 sp_helptext 存储过程、syscomments 视图查询及自定义函数 fgetscript 的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 转:http://topic.youkuaiyun.com/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、付费专栏及课程。

余额充值