在工作中,遇到了一个任务,需要将A数据库的数据迁移到B数据库,两个数据库的数据结构是一样的。B数据库已经在相当数量的数据了,故而不能通过复制数据库的方式来实现。
旧方法
在对数据迁移的时候,一开始使用的是以下方法:
(1)使用SSMS的”生成和发布脚本”功能,将A数据库的数据导出成sql脚本。
脚本类似于:
INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (10649, 0, N'其他', N'0000000') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (1, 2, N'成都', N'1398098') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (2, 2, N'成都', N'1360804') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (3, 2, N'成都', N'1398198') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (4, 2, N'成都', N'1398195') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (5, 2, N'成都', N'1355114') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (6, 2, N'成都', N'1390807') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (7, 2, N'成都', N'1370804') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (8, 2, N'成都', N'1398071') INSERT [dbo].[region] ([id], [region_id], [region_name], [region_code]) VALUES (9, 2, N'成都', N'1365808')
(2)将生成sql脚本在B数据库上执行。
问题与困难
采用这种方式应对几千条数据还是没有问题的,但是当数据达到10万的时候,速度真是慢得令人发指。
新方法
通过探索,自创了一种新方法。
(1)使用链接服务器,在B数据库所在数据库服务器上建立一个链接服务器,指向A数据库。这样一来,在B数据库中就能直接操作A数据库了。
(2)使用insert into() select form 语句,直接将A数据库中查到的数据插入到B数据库中。
将上面的脚本改造成类似于:
1 INSERT INTO [dbo].[region] 2 ( [id] , 3 [region_id] , 4 [region_name] , 5 [region_code] 6 ) 7 SELECT [id] , 8 [Bundling] , 9 [region_id] , 10 [region_name] , 11 [region_code] 12 FROM [Xianjie].[A].[dbo].[region]
迁移的速度得到了百倍以上的提升。哈哈