导入导出 Excel 和 txt 文件

--------------------------- 1. 查询/导入EXCEL -------------------------------------
/*
1. 如有 “尚未注册 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0"。” 这个错误
-- http://www.microsoft.com/zh-cn/download/details.aspx?id=13255
-- 根据操作系统版本来安装
-- 下面是 64位 的安装包下载地址
-- https://download.microsoft.com/download/E/4/2/E4220252-5FAE-4F0A-B1B9-0B48B5FBCCF9/AccessDatabaseEngine_X64.exe
*/
select * 
--into #tmp
from OpenDataSource('Microsoft.ACE.OLEDB.12.0',
	'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\test.xlsx')...[Sheet1$]

--------------------------- 2. 导出EXCEL -------------------------------------
--方法一:
--1. d:\test.xlsx 必须存在;
--2. test.xlsx中的名称为 Sheet1 的工作簿必须存在;
--3. test.xlsx 必须是关闭状态;
--4. 工作簿查询语句中的列数必须与下面的查询语句的列数能对应;
INSERT INTO openrowset('Microsoft.ACE.OLEDB.12.0',
	'Excel 12.0;HDR=Yes;Database=D:\test.xlsx','select name from [Sheet1$]')
SELECT [type] FROM MASTER.dbo.spt_values AS sv

--方法二:
/*
--1. 如果有 “SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问” 这个错误,可执行:
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
--2. 如果有同名EXCEL文件,不能是打开状态,而且会覆盖;
--3. 不能创建表头;
--4. 如果用Windows账号,可以去掉 -U -P, 类似:
--EXEC master..xp_cmdshell 'bcp "SELECT * FROM master.dbo.spt_values" queryout d:\t2.xlsx -c -S .\sqlserver2005 -T'
*/
EXEC master..xp_cmdshell 'bcp "SELECT * FROM master.dbo.spt_values" queryout d:\t2.xlsx -c -S .\sqlserver2005 -U ? -P ?'

--------------------------- 3. 导入txt -------------------------------------
--方法一:
select id_Name 
--into #tmp
from OpenDataSource('Microsoft.ACE.OLEDB.12.0',
	'Text;HDR=Yes;IMEX=1;Database=D:\')...[t1#txt]

--方法二:
/*
--1. 表结构
CREATE TABLE t1(id NVARCHAR(20),[name] NVARCHAR(20))
id	NAME
1	A
--2. Sql账号处理类似:
--EXEC master..xp_cmdshell 'bcp tempdb..t1 in d:\1.txt -c -Sservername -Usa -Ppassword'
*/
EXEC master..xp_cmdshell 'bcp tempdb..t1 in d:\1.txt -c -S .\sqlserver2005 -T'

--方法三:
BULK INSERT tempdb.dbo.t1
    FROM 'd:\1.txt'
    WITH (
        DATAFILETYPE = 'Char'
        --,FIELDTERMINATOR = ','
		--,ROWTERMINATOR =  '0x0a'
);

--------------------------- 4. 导出txt -------------------------------------
--方法一:
--1. 在 d:\ 创建 t1.txt 的文本文件;
--2. 内容只有一行,“id,name” ,逗号不能少
INSERT INTO OpenDataSource('Microsoft.ACE.OLEDB.12.0',
	'Text;HDR=Yes;IMEX=1;Database=D:\')...[t1#txt] 
SELECT * FROM tempdb.dbo.t1

--方法二:
--注:同一文件,第2次导出会覆盖前面的内容
--EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'
EXEC master..xp_cmdshell 'bcp "Select * from tempdb.dbo.t1" queryout d:\t1.txt -c -T'


注意,如果出现错误:链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 返回了消息 "未指定的错误"。

, 可能是权限不够, 可以将登录账号设置为“本地系统账户”:



参考:

msdn

点击打开链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值