跨服务器修改存储过程,SQL Server使用存储过程+事务+游标跨库将一个表中的数据导出到另一服务器的两个数据库表中...

根据工作需要有时需要迁移大量的数据,于是按自己的想法做了一个数据迁移的存储过程,欢迎大家提出更好的建议,完整的存储过程如下:

create procedure DataMove --创建存储过程

--ALTER procedure DataMove --修改存储过程

as

BEGIN

declare @MaxID int--插入到文章表后的新ID

declare @Count int--统计迁移数据的条数

set @Count=0

--如存在跨库链接服务器,则删除

if exists(select * from master..sysservers where srvname= 'srv_lnk')

exec sp_dropserver  'srv_lnk', 'droplogins'

--建立跨库链接服务器

exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','172.16.14.55'--最后一个参数为数据库服务器地址

exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','sa'--最后两个个参数为数据库服务器的登录用户名和密码

declare mycursor cursor for

select id from srv_lnk.kxyjdb.dbo.PageContent where 主类=5

declare @id int

open mycursor

fetch next from mycursor into @id

while @@fetch_status = 0

begin

if not exists(select * from ZWY.dbo.Article a where a.Title=(select 标题 from srv_lnk.kxyjdb.dbo.PageContent b where id=@id))

BEGIN

begin tran mytran --开始执行事务

--向文章表导入数据

INSERT ZWY.dbo.Article(CategoryID,Title, [Content],UserID, Username,IsCheck,IsLock)

SELECT 46,标题,内容,2,'admin',1,0

FROM srv_lnk.kxyjdb.dbo.PageContent

WHERE id=@id

set @MaxID=@@identity --得到最新插入记录的ID

--print @MaxID

--向文章字段扩展表导入数据

INSERT ZWY.dbo.ExtendTable_ArticleType_9(ArticleID, XueKe, KanMing,JuanQi, CaiJiWangZhi, CaiJiShiJian,FuJian)

SELECT @MaxID,学科,发者,发时,采址,采时, '/attachment/'+附件

FROM srv_lnk.kxyjdb.dbo.PageContent

WHERE id=@id

set @Count=@Count+1

if @@error<>0 --判断如果两条语句有任何一条出现错误

begin

rollback tran mytran--开始执行事务的回滚,恢复的转账开始之前状态

end

else  --如何两条都执行成功

begin

commit tran mytran--执行这个事务的操作

end

END--END if

fetch next from mycursor into @id

end--end while

close mycursor

DEALLOCATE mycursor

exec sp_dropserver  'srv_lnk', 'droplogins'--删除跨库链接服务器

return @Count --返回导入记录条数

END

--测试存储过程

--declare @return_status int

--exec @return_status= DataMove

--print @return_status

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值