创建存储过程,事务,游标, 将一个表中的数据转入到另外一个库的一个表或两个表中

CREATE PROCEDURE dataMove_mall_users  --创建存储过程

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

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 ChinaHRD.dbo.users

DECLARE @id INT

OPEN myCursor

FETCH NEXT FROM myCursor INTO @id

WHILE @@fetch_status = 0

BEGIN

IF NOT EXISTS(SELECT * FROM EMall.dbo.mall_Users AS nUsers WHERE nUsers.Name = (SELECT PetName FROM ChinaHRD.dbo.users oUsers WHERE id=@id))

BEGIN

BEGIN TRAN myTran --开始执行事务

--向文章表导入数据

INSERT EMall.dbo.mall_Users(Id,Name, Email,PasswordFormat, Password,UCenterId,CreationTime,LastLoginTime,IsApproved,IsLockedOut,LastActivityTime,
    LastPasswordChangedTime,LastLockoutTime,FailedPasswordAttemptCount,FailedPasswordAttemptWindowStart,FailedPasswordAnswerAttemptCount,
    FailedPasswordAnswerAttemptWindowStart,Revenue,RmbBalance) 

SELECT id,petname,Name,0,Password,id,RregTime,LoginTime,0,0,'0001-01-01 00:00:00.0000000','0001-01-01 00:00:00.0000000','0001-01-01 00:00:00.0000000',
    0,'0001-01-01 00:00:00.0000000',0,'0001-01-01 00:00:00.0000000',0.0,0.0

FROM ChinaHRD.dbo.users

WHERE id=@id


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

--print @MaxID

 
/*
--向扩展表导入数据

INSERT TableName(ArticleID, XueKe, KanMing,JuanQi, CaiJiWangZhi, CaiJiShiJian,FuJian) 

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

FROM OldTableName

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_mall_users

--print @return_status

 

posted @ 2013-10-14 12:07  echorz  阅读(1046)  评论(0编辑  收藏  举报