本次把整个博客都新建项目重写一遍了,所以需要把旧用户数据插入到新的里面,因此设计跨服务器复制数据。
一般我们同库不同表之间复制数据会使用以下两种方式复制表数据
select into table1 from table2 和 insert into table select table2
而我这里的区别只是跨服务器,所以需呀远程连接其中一台数据库
通过以下代码建立服务器连接
EXEC sp_addlinkedserver@server='blog', -- 这是链接服务器的别名 可以任务取名 @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.1.183' --这是服务器所在连接的ip
再通过以下代码 建立登录映射
EXEC sp_addlinkedsrvlogin '上面建立连接使用的别名','false',NULL,'sql登录账号','sql登录密码'
再通过以下代码 测试是否连接成功 如果连接成功则可以查询数据
select * from blog.Blogs.dbo.Users -- 这里前一个blog是上面建立连接使用的别名 第二个Blogs是数据库名 Users是表名
再通过类似以下的
select into
代码即可复制数据
insert into table1(field1,field3,field5...) select field2, field4, field6... from blog.Blogs.dbo.Users
如果不再使用该连接 则删除其
Exec sp_droplinkedsrvlogin blog,Null --blog是上面建立连接使用的别名Exec sp_dropserver blog --blog是上面建立连接使用的别名
衍生点 : 因为我本次迁移数据是会涉及主键一次复制的所以会遇到 以下异常
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'User'中的标识列指定显式值
所以需要通过以下代码开启主键插入
set IDENTITY_INSERT BlogUser on 关闭是off set IDENTITY_INSERT BlogUser off
除另有声明外,本文章Sql Server跨服务器复制数据采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。