sqlserver2014 数据线上导入 sqlserver 2008的思路
背景: 要将dbf格式的数据 导入2008数据库,试了很多办法,无果。
解决方法: 之前有过dbf导入2014版的数据库经验,所以想先导入2014库,再用2014导入2008 方法。
- 通过openrowset函数读取dbf文件
- 开启功能
-
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
使用完毕后,记得一定要要关闭它,因为这是一个安全隐患,切记执行下面的SQL语句exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure - select * from openrowset('Microsoft.ACE.OLEDB.12.0','dBase IV;DATABASE=E:\客户\西工大\','select * from [rjz.dbf]')
- 这步可能需要安装Microsoft.ACE.OLEDB.12.0,有相应安装包,并且位数要对,32位对应office 32位
- 建立链接服务器
--创建链接服务器
EXEC sp_addlinkedserver @server='LINKED_SERVER_TEST2',--被访问的服务器别名 @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.88.6,11433'--数据源 GO --创建登录名和密码 EXEC sys.sp_addlinkedsrvlogin @rmtsrvname = 'LINKED_SERVER_TEST2', -- 被访问的服务器别名 @useself = 'false', @locallogin = NULL, @rmtuser = 'sa', -- 数据源登录名 @rmtpassword = 'psd123456' -- 数据源登录密码 GO --设置数据可以访问 EXEC sys.sp_serveroption @server = 'LINKED_SERVER_TEST2', @optname = 'data access', @optvalue = N'true' GO
3. 通过链接服务器插入
insert into [LINKED_SERVER_TEST2].yhdz.yhdz_jz select * from openrowset('Microsoft.ACE.OLEDB.12.0','dBase IV;DATABASE=E:\客户\西工大\','select * from [rjz.dbf]')
有几个问题需要记录:
a.源表列的值有null值,插入报错,用isnull处理
b.目标表有自增列,显示去掉自增不好使。想到方法,先在目的库里建一个相同结构表,没有自增。用上面语句插入数据,在从这个表插入到目的表。
--创建链接服务器 EXEC sp_addlinkedserver @server='LINKED_SERVER_TEST2',--被访问的服务器别名 @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.88.6,11433'--数据源 GO --创建登录名和密码 EXEC sys.sp_addlinkedsrvlogin @rmtsrvname = 'LINKED_SERVER_TEST2', -- 被访问的服务器别名 @useself = 'false', @locallogin = NULL, @rmtuser = 'sa', -- 数据源登录名 @rmtpassword = 'psd123456' -- 数据源登录密码 GO --设置数据可以访问 EXEC sys.sp_serveroption @server = 'LINKED_SERVER_TEST2', @optname = 'data access', @optvalue = N'true' GO