Sql Server 脚本倒出远程数据库结构及存贮过程。

来源:互联网 发布:全球社科类期刊 知乎 编辑:程序博客网 时间:2024/06/05 08:52

一、建立一个新的链接接服务器。

exec sp_addlinkedserver
     @server='demo',--要连接的服务器别名
     @srvproduct='',
     @provider='SQLOLEDB',
     @datasrc='HNTV-DES'--要连接的服务器名称

exec sp_addlinkedsrvlogin
     'demo',
     FALSE,
     NULL,
     'sa',
     '000000'            
Select * From openquery([demo],'Select * From test.aa.tb2')

可用以上脚本,也可以在  Management Studio 中 点击 服务器对象---》链接服务器中新建。

 

二、创建数据库 Learn,

执行如下sql脚本,可将制定数据库结构及数据导入至Learn

  

use learn

go

exec sp_msforeachtable 'drop table ?' --清空数据库中的所有表

 

declare @uName varchar(256)

declare @strSql nvarchar(4000)

 

set @strSql=''

 

declare c cursor for select name From [TEST].BTOCMALL.DBO.sysobjects where xtype='u'

 

open c

 

fetch next from c into @uName

 

while @@FETCH_STATUS=0

Begin

         set @strSql='Select * into '+@uName+' From [TEST].BTOCMALL.DBO.'+@uName+''

--set @strSql='Select * into '+@uName+' From [TEST].BTOCMALL.DBO.'+@uName+' where 1=2' --使用该语句可只倒出数据库结构无任何数据

         --print @strSql

         exec sp_executesql @strSql

         fetch next from c into @uName

end

close c

deallocate c

三,将存贮过程导出到表userprocedue,该表有两个字段,一用于存取存贮过程名称,一用于存取存贮过程内容。

 

 

use learn

go

if object_id('userprocedue') is not null

drop table userprocedue

 

Create table userprocedue(

         producename varchar(256),

         ncontent ntext

)

 

declare @producename varchar(256)

declare @text nvarchar(4000)

 

declare c cursor for select b.name,definition from [TEST].BTOCMALL.sys.sql_modules a,[TEST].BTOCMALL.sys.objects b where a.[object_id]=b.[object_id] and type='P'

 

open c

 

fetch next from c into @producename,@text

 

while @@FETCH_STATUS=0

Begin

         --print @producename

         insert into userprocedue values(@producename,@text)

        

         fetch next from c into @producename,@text

end

 

Select * From userprocedue

 

close c

deallocate c

 

 

四、重新创建导出的存贮过程。

 

use learn
go


declare @ncontent nvarchar(4000)

declare c cursor for select ncontent from userprocedue

open c

fetch next from c into @ncontent

while @@FETCH_STATUS=0
Begin
 --print @producename
 exec sp_executesql @ncontent
 
 fetch next from c into @ncontent
end

close c
deallocate c

 

原创粉丝点击