上次讲到了SQL Server 2014 Express的安装配置,这次继续导入外部数据的话题,以Excel为例。
先上视频,
导入的方式可以有多种,
使用SQL Server自带的导入导出向导,
这样做的好处是直观明了,缺点是不方便自动化
使用SQL语句导入
导入前确保已经安装了Microsoft Access 2010 数据库引擎可再发行程序包(https://www.microsoft.com/zh-CN/download/details.aspx?id=13255),并保证版本正确(32位还是64位,和系统对应上)
保证SQL Server是以本地系统账号运行,如果不是,改过来,并重启SQL Server服务
否则会有类似报错,
Msg 7399, Level 16, State 1, Server IE10WIN7, Line 2The OLE DB provider “Microsoft.ACE.OLEDB.12.0” for linked server “(null)” reported an error. The provider did not give any information about the error.Msg 7330, Level 16, State 2, Server IE10WIN7, Line 2Cannot fetch a row from OLE DB provider “Microsoft.ACE.OLEDB.12.0” for linked server “(null)”.
执行如下语句,
USE [master]GOsp_configure ‘show advanced options’, 1;RECONFIGURE;GOsp_configure ‘Ad Hoc Distributed Queries’, 1;RECONFIGURE;GOEXEC master . dbo. sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′ , N’AllowInProcess’ , 1GOEXEC master . dbo. sp_MSset_oledb_prop N’Microsoft.ACE.OLEDB.12.0′ , N’DynamicParameters’ , 1GO
别忘了告诉你打算把数据导入到哪个库,
–打算把表创建在哪个库use metabase1– 当然你也可以在sqlcmd指定数据库
然后就可以建表,
GO– 创建新表并d导入SELECT * INTO titanic1FROM OPENROWSET(‘Microsoft.ACE.OLEDB.12.0′,’Excel 12.0; Database=C:\soft\titanic.xlsx; HDR=YES; IMEX=1′,’SELECT*FROM[Sheet1$]’);GO
或者追加到已存在的表,
INSERT INTO titanic1SELECT *FROM OPENROWSET(‘Microsoft.ACE.OLEDB.12.0′,’Excel 12.0; Database=C:\soft\titanic.xlsx; HDR=YES; IMEX=1′,’SELECT * FROM [Sheet1$]’);
命令行的方式运行,
sqlcmd-C-d metabase1-ic:\soft\sql1.txt
sql1.txt里放的就是上面的SQL语句
Excel转CSV,然后使用BCP命令,这个算另外一个话题了
开发脚本(比如Python脚本)实现(先挖坑,待填)