sql server导出数据到excel表格

chestnut 2013-09-17 05:19:58
背景:sql server 能否实现不用先建好excel文件,就导出数据到一个新的excel表格。试了exec master..xp_cmdshell bcp,这个需要先建好表格并且设置好文件权限之后才能够导出数据。
问题:能否我直接导出数据到一个实际不存在的文件名,导出的时候,自动创建好这个文件,然后导出数据。
...全文
147 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzw_0736 2013-09-18
  • 打赏
  • 举报
回复

--如果已建立連線,也可以如下:
EXEC master..xp_cmdshell 'bcp "SELECT * FROM 庫名.dbo.表名" queryout C:\temp.xls -c -T'
Mr_Nice 2013-09-18
  • 打赏
  • 举报
回复
引用 3 楼 journeysxy 的回复:
[quote=引用 2 楼 DBA_Huangzj 的回复:]
--这是个例子,我假设要把test库的temtable表的applicationID,Category两列导出成CSV文件
if OBJECT_ID('temtable','u')is not null
drop table temtable

select * into temtable from (select 'applicationID'as [applicationID],'Category'  as [Category] --表头
union all 
select CONVERT(varchar(20),[applicationID]), [Category] from  #temtable)a
declare @filename nvarchar(30)
select @filename='Report'+right(replace(convert(date,GETDATE()),'-',''),2)+substring(replace(convert(date,GETDATE()),'-',''),5,2)+substring(replace(convert(date,GETDATE()),'-',''),1,4)+'.csv'
------------------------------------------
declare @strSQL nvarchar(1024)
set @strSQL='bcp "SELECT applicationID,Category FROM test.dbo.temtable" queryout C:\Temp\DBA_date\'+@filename+' -c -T -t","'
print @strSQL
EXEC master..xp_cmdshell @strSQL
没有事先建好文件,一直会报这个错误:Error = [Microsoft][SQL Server Native Client 11.0]无法打开 BCP 主数据文件[/quote] 这个报错是权限问题哦。
lzw_0736 2013-09-18
  • 打赏
  • 举报
回复

--試試以下代碼:
EXEC master..xp_cmdshell 'bcp "SELECT * FROM 庫名.dbo.表名" queryout C:\temp.xls -c -S 服務器名 -U 用戶名 -P 密碼'

chestnut 2013-09-18
  • 打赏
  • 举报
回复
引用 10 楼 OrchidCat 的回复:
[quote=引用 9 楼 journeysxy 的回复:] [quote=引用 7 楼 OrchidCat 的回复:] [quote=引用 3 楼 journeysxy 的回复:] [quote=引用 2 楼 DBA_Huangzj 的回复:]
--这是个例子,我假设要把test库的temtable表的applicationID,Category两列导出成CSV文件
if OBJECT_ID('temtable','u')is not null
drop table temtable

select * into temtable from (select 'applicationID'as [applicationID],'Category'  as [Category] --表头
union all 
select CONVERT(varchar(20),[applicationID]), [Category] from  #temtable)a
declare @filename nvarchar(30)
select @filename='Report'+right(replace(convert(date,GETDATE()),'-',''),2)+substring(replace(convert(date,GETDATE()),'-',''),5,2)+substring(replace(convert(date,GETDATE()),'-',''),1,4)+'.csv'
------------------------------------------
declare @strSQL nvarchar(1024)
set @strSQL='bcp "SELECT applicationID,Category FROM test.dbo.temtable" queryout C:\Temp\DBA_date\'+@filename+' -c -T -t","'
print @strSQL
EXEC master..xp_cmdshell @strSQL
没有事先建好文件,一直会报这个错误:Error = [Microsoft][SQL Server Native Client 11.0]无法打开 BCP 主数据文件[/quote] 这个报错是权限问题哦。 [/quote]是指sa用户没权建excel文件吗?![/quote] 参考: EXEC xp_cmdshell 'ECHO %USERDOMAIN%\%USERNAME%' 看返回的是否为 :NT AUTHORITY\NETWORK SERVICE 配置管理器(configuration manager)看到登陆内置账号为Network service,改成local system问题解决。 执行创建excel的时候,是需要在windows端创建文件。network service是没有这个权限的。 需要提升权限才可以。 因此修改为local system 就是本地系统账户,即可创建文件了。 [/quote]更改问本地系统帐号,就可以导出的时候自己建文件了。
Mr_Nice 2013-09-18
  • 打赏
  • 举报
回复
引用 9 楼 journeysxy 的回复:
[quote=引用 7 楼 OrchidCat 的回复:] [quote=引用 3 楼 journeysxy 的回复:] [quote=引用 2 楼 DBA_Huangzj 的回复:]
--这是个例子,我假设要把test库的temtable表的applicationID,Category两列导出成CSV文件
if OBJECT_ID('temtable','u')is not null
drop table temtable

select * into temtable from (select 'applicationID'as [applicationID],'Category'  as [Category] --表头
union all 
select CONVERT(varchar(20),[applicationID]), [Category] from  #temtable)a
declare @filename nvarchar(30)
select @filename='Report'+right(replace(convert(date,GETDATE()),'-',''),2)+substring(replace(convert(date,GETDATE()),'-',''),5,2)+substring(replace(convert(date,GETDATE()),'-',''),1,4)+'.csv'
------------------------------------------
declare @strSQL nvarchar(1024)
set @strSQL='bcp "SELECT applicationID,Category FROM test.dbo.temtable" queryout C:\Temp\DBA_date\'+@filename+' -c -T -t","'
print @strSQL
EXEC master..xp_cmdshell @strSQL
没有事先建好文件,一直会报这个错误:Error = [Microsoft][SQL Server Native Client 11.0]无法打开 BCP 主数据文件[/quote] 这个报错是权限问题哦。 [/quote]是指sa用户没权建excel文件吗?![/quote] 参考: EXEC xp_cmdshell 'ECHO %USERDOMAIN%\%USERNAME%' 看返回的是否为 :NT AUTHORITY\NETWORK SERVICE 配置管理器(configuration manager)看到登陆内置账号为Network service,改成local system问题解决。 执行创建excel的时候,是需要在windows端创建文件。network service是没有这个权限的。 需要提升权限才可以。 因此修改为local system 就是本地系统账户,即可创建文件了。
chestnut 2013-09-18
  • 打赏
  • 举报
回复
引用 7 楼 OrchidCat 的回复:
[quote=引用 3 楼 journeysxy 的回复:] [quote=引用 2 楼 DBA_Huangzj 的回复:]
--这是个例子,我假设要把test库的temtable表的applicationID,Category两列导出成CSV文件
if OBJECT_ID('temtable','u')is not null
drop table temtable

select * into temtable from (select 'applicationID'as [applicationID],'Category'  as [Category] --表头
union all 
select CONVERT(varchar(20),[applicationID]), [Category] from  #temtable)a
declare @filename nvarchar(30)
select @filename='Report'+right(replace(convert(date,GETDATE()),'-',''),2)+substring(replace(convert(date,GETDATE()),'-',''),5,2)+substring(replace(convert(date,GETDATE()),'-',''),1,4)+'.csv'
------------------------------------------
declare @strSQL nvarchar(1024)
set @strSQL='bcp "SELECT applicationID,Category FROM test.dbo.temtable" queryout C:\Temp\DBA_date\'+@filename+' -c -T -t","'
print @strSQL
EXEC master..xp_cmdshell @strSQL
没有事先建好文件,一直会报这个错误:Error = [Microsoft][SQL Server Native Client 11.0]无法打开 BCP 主数据文件[/quote] 这个报错是权限问题哦。 [/quote]是指sa用户没权建excel文件吗?!
chestnut 2013-09-17
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
那是别的问题,我这个代码是没有实现创建好的。一直在用。
太忧伤了
發糞塗牆 2013-09-17
  • 打赏
  • 举报
回复
那是别的问题,我这个代码是没有实现创建好的。一直在用。
chestnut 2013-09-17
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
--这是个例子,我假设要把test库的temtable表的applicationID,Category两列导出成CSV文件
if OBJECT_ID('temtable','u')is not null
drop table temtable

select * into temtable from (select 'applicationID'as [applicationID],'Category'  as [Category] --表头
union all 
select CONVERT(varchar(20),[applicationID]), [Category] from  #temtable)a
declare @filename nvarchar(30)
select @filename='Report'+right(replace(convert(date,GETDATE()),'-',''),2)+substring(replace(convert(date,GETDATE()),'-',''),5,2)+substring(replace(convert(date,GETDATE()),'-',''),1,4)+'.csv'
------------------------------------------
declare @strSQL nvarchar(1024)
set @strSQL='bcp "SELECT applicationID,Category FROM test.dbo.temtable" queryout C:\Temp\DBA_date\'+@filename+' -c -T -t","'
print @strSQL
EXEC master..xp_cmdshell @strSQL
没有事先建好文件,一直会报这个错误:Error = [Microsoft][SQL Server Native Client 11.0]无法打开 BCP 主数据文件
發糞塗牆 2013-09-17
  • 打赏
  • 举报
回复
--这是个例子,我假设要把test库的temtable表的applicationID,Category两列导出成CSV文件
if OBJECT_ID('temtable','u')is not null
drop table temtable

select * into temtable from (select 'applicationID'as [applicationID],'Category'  as [Category] --表头
union all 
select CONVERT(varchar(20),[applicationID]), [Category] from  #temtable)a
declare @filename nvarchar(30)
select @filename='Report'+right(replace(convert(date,GETDATE()),'-',''),2)+substring(replace(convert(date,GETDATE()),'-',''),5,2)+substring(replace(convert(date,GETDATE()),'-',''),1,4)+'.csv'
------------------------------------------
declare @strSQL nvarchar(1024)
set @strSQL='bcp "SELECT applicationID,Category FROM test.dbo.temtable" queryout C:\Temp\DBA_date\'+@filename+' -c -T -t","'
print @strSQL
EXEC master..xp_cmdshell @strSQL
發糞塗牆 2013-09-17
  • 打赏
  • 举报
回复
不用预先设置啊,我都是直接导出来的,不过是CSV,用的就是BCP,导出的时候才指定文件名

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧