AndyGe

用SQL SERVER对EXCEL数据进行处理

2013-04-11 11:21  Andy Ge  阅读(645)  评论(0编辑  收藏  举报
EXEC sp_configure \'show advanced options\'1;  
GO 
RECONFIGURE
GO 
EXEC sp_configure \'Ad Hoc Distributed Queries\'1 
GO 
RECONFIGURE
GO 

SELECT * INTO wuli FROM OPENROWSET(\'Microsoft.Jet.OLEDB.4.0\',\'Excel 8.0;Database=C:\wuli.xls\'[Sheet1$])

 

如果是*.xlsx格式,需要另存为03格式*.xls。 

可以把Excel的数据导入到数据库,然后用数据库进行条件查询,将查询结果拷贝并黏贴到新的EXCEL即可。

如果再导入过程中出现错误,如\'server (null)....”类似的信息,重新启动一下SQLSERVER Service就好了。

 例如上面的物理成绩表,需要单独保存每个学校统的指定字段数据到EXCEL,这时候,手工拷贝就很麻烦了,这时侯,也可以通过SQL来实现。

这种方式的基本原理其实是利用了BCP命令,将查询数据导出EXCEL,有两种方式可以执行这些BCP语句,

1.通过master..xp_cmdShell,这种方式存在一个问题,就是其参数类型为\'sysname\',但是只有255个字符长度,对于较长的查询,显然是不够的。

2.把这些BCP语句拷贝到批处理文件中,然后执行,BCP的参数没有长度的限制,所有可以执行较长的查询。

 

在执行\'xp_cmdShell\'之前,需要先打开开关语句如下:

 

EXEC sp_configure \'show advanced options\'1;
go
RECONFIGURE;
EXEC sp_configure \'xp_cmdshell\'1;
go
RECONFIGURE;

采用xp_cmdShell执行,如下:

--create table #tt
--
(
--
    id int identity,
--
    name varchar(50)
--
)
--
insert into #tt
--
select distinct [学校] from wz
--
truncate table #tt

declare @total int 
select @total = MAX(id) from #tt
declare @i int = 1,@schoolName varchar(50),@sql sysname = \'\'
declare @colNames varchar(max= \'*\'
while(@i <=@total)
begin
    
select @schoolName = name from #tt where ID=@i
    
set @i += 1
    
set @sql = \'bcp "SELECT \' + @colNames + \' FROM demo..wz where [学校]=\'\'\' + @schoolName + \'\'\'" queryout C:\wk\wz\' + @schoolName +\'.xls -c -S . -U sa -P hx123456\' 
    
EXEC master..xp_cmdshell @sql
end

下面的例子演示了如果生成BCP语句,将这些语句拷贝到新建的批处理文件中,执行即可。

获取一个表的所有列:

declare @colNames varchar(max= \'\'
select @colNames += \'[\' + name + \'],\' from sys.columns where object_id=object_id(\'wx\'--and name like \'%答案%\'

print @colNames

 

declare @total int 
select @total = MAX(id) from #tt
declare @i int = 1,@schoolName varchar(50),@sql varchar(max= \'\'
declare @colNames varchar(max= \'[考生号],[姓名],[总分],[政治选择题25答案],[政治选择题26答案],[政治选择题27答案],[政治选择题28答案],[政治选择题29答案],[政治选择题30答案],[政治选择题31答案],[政治选择题32答案],[政治选择题33答案],[政治选择题34答案],[政治选择题35答案],[政治选择题36答案],[政治39(1)],[政治39(2)],[政治39(3)],[政治39(4)],[政治(选做A)42(1)],[政治(选做A)42(2)],[历史选择题13答案],[历史选择题14答案],[历史选择题15答案],[历史选择题16答案],[历史选择题17答案],[历史选择题18答案],[历史选择题19答案],[历史选择题20答案],[历史选择题21答案],[历史选择题22答案],[历史选择题23答案],[历史选择题24答案],[历史38(1)],[历史38(2)],[历史38(3)],[历史38(4)],[历史(选做A) 41(1)],[历史(选做A) 41(2)],[地理选择题1答案],[地理选择题2答案],[地理选择题3答案],[地理选择题4答案],[地理选择题5答案],[地理选择题6答案],[地理选择题7答案],[地理选择题8答案],[地理选择题9答案],[地理选择题10答案],[地理选择题11答案],[地理选择题12答案],[地理37(1)],[地理37(2)],[地理37(3)],[地理37(4)],[地理(选做A) 40(1)],[地理(选做A) 40(2)]\'
while(@i <=@total)
begin
    
select @schoolName = name from #tt where ID=@i
    
set @i += 1
    
set @sql = \'bcp "SELECT \' + @colNames + \' FROM demo..wx where [学校]=\'\'\' + @schoolName + \'\'\'" queryout C:\wk\wz\' + @schoolName +\'.xls -c -S . -U sa -P 1234567890\' 
    
print @sql
    
--EXEC master..xp_cmdshell @sql
end

生成的BCP语句如下:

bcp "SELECT [考生号],[姓名],[总分],[政治选择题25答案],[政治选择题26答案],[政治选择题27答案],[政治选择题28答案],[政治选择题29答案],[政治选择题30答案],[政治选择题31答案],[政治选择题32答案],[政治选择题33答案],[政治选择题34答案],[政治选择题35答案],[政治选择题36答案],[政治39(1)],[政治39(2)],[政治39(3)],[政治39(4)],[政治(选做A)42(1)],[政治(选做A)42(2)],[历史选择题13答案],[历史选择题14答案],[历史选择题15答案],[历史选择题16答案],[历史选择题17答案],[历史选择题18答案],[历史选择题19答案],[历史选择题20答案],[历史选择题21答案],[历史选择题22答案],[历史选择题23答案],[历史选择题24答案],[历史38(1)],[历史38(2)],[历史38(3)],[历史38(4)],[历史(选做A) 41(1)],[历史(选做A) 41(2)],[地理选择题1答案],[地理选择题2答案],[地理选择题3答案],[地理选择题4答案],[地理选择题5答案],[地理选择题6答案],[地理选择题7答案],[地理选择题8答案],[地理选择题9答案],[地理选择题10答案],[地理选择题11答案],[地理选择题12答案],[地理37(1)],[地理37(2)],[地理37(3)],[地理37(4)],[地理(选做A) 40(1)],[地理(选做A) 40(2)] FROM demo..wx where [学校]=\'厦门市东山中学\'" queryout C:\wk\wz厦门市东山中学.xls -c -S . -U sa -P hx123456
bcp "SELECT [考生号],[姓名],[总分],[政治选择题25答案],[政治选择题26答案],[政治选择题27答案],[政治选择题28答案],[政治选择题29答案],[政治选择题30答案],[政治选择题31答案],[政治选择题32答案],[政治选择题33答案],[政治选择题34答案],[政治选择题35答案],[政治选择题36答案],[政治39(1)],[政治39(2)],[政治39(3)],[政治39(4)],[政治(选做A)42(1)],[政治(选做A)42(2)],[历史选择题13答案],[历史选择题14答案],[历史选择题15答案],[历史选择题16答案],[历史选择题17答案],[历史选择题18答案],[历史选择题19答案],[历史选择题20答案],[历史选择题21答案],[历史选择题22答案],[历史选择题23答案],[历史选择题24答案],[历史38(1)],[历史38(2)],[历史38(3)],[历史38(4)],[历史(选做A) 41(1)],[历史(选做A) 41(2)],[地理选择题1答案],[地理选择题2答案],[地理选择题3答案],[地理选择题4答案],[地理选择题5答案],[地理选择题6答案],[地理选择题7答案],[地理选择题8答案],[地理选择题9答案],[地理选择题10答案],[地理选择题11答案],[地理选择题12答案],[地理37(1)],[地理37(2)],[地理37(3)],[地理37(4)],[地理(选做A) 40(1)],[地理(选做A) 40(2)] FROM demo..wx where [学校]=\'厦门市第二外国语中学\'" queryout C:\wk\wz厦门市第二外国语中学.xls -c -S . -U sa -P hx123456
bcp "SELECT [考生号],[姓名],[总分],[政治选择题25答案],[政治选择题26答案],[政治选择题27答案],[政治选择题28答案],[政治选择题29答案],[政治选择题30答案],[政治选择题31答案],[政治选择题32答案],[政治选择题33答案],[政治选择题34答案],[政治选择题35答案],[政治选择题36答案],[政治39(1)],[政治39(2)],[政治39(3)],[政治39(4)],[政治(选做A)42(1)],[政治(选做A)42(2)],[历史选择题13答案],[历史选择题14答案],[历史选择题15答案],[历史选择题16答案],[历史选择题17答案],[历史选择题18答案],[历史选择题19答案],[历史选择题20答案],[历史选择题21答案],[历史选择题22答案],[历史选择题23答案],[历史选择题24答案],[历史38(1)],[历史38(2)],[历史38(3)],[历史38(4)],[历史(选做A) 41(1)],[历史(选做A) 41(2)],[地理选择题1答案],[地理选择题2答案],[地理选择题3答案],[地理选择题4答案],[地理选择题5答案],[地理选择题6答案],[地理选择题7答案],[地理选择题8答案],[地理选择题9答案],[地理选择题10答案],[地理选择题11答案],[地理选择题12答案],[地理37(1)],[地理37(2)],[地理37(3)],[地理37(4)],[地理(选做A) 40(1)],[地理(选做A) 40(2)] FROM demo..wx where [学校]=\'厦门市集美中学\'" queryout C:\wk\wz厦门市集美中学.xls -c -S . -U sa -P hx123456
......................

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-07-28
  • 2022-02-08
  • 2022-12-23
  • 2021-09-18
  • 2021-12-05
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-12-12
  • 2021-12-13
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案