转:http://topic.csdn.net/t/20050128/19/3761627.html
sp_helptext
'
要取得脚本的触发器名
'
--
或者:
select text from syscomments where id = object_id (N ' 要取得脚本的触发器名 ' )
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
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