SQL导出到EXCEL时出错

时间:2022-02-11 02:32:52
我想把数据库DOT中一个表ODM_required_data里的数据导出到我自己建好的一个EXCEL表test.xls的sheet1中,表头已事先建好,和表ODM_required_data里的数据列一致,可是导完后出现错误,第一列的数据不是表ODM_required_data中对应的第一列的数据,而是第三列的数据,其他列的数据也相互窜了,大家说说为什么啊?下面是存储过程的代码:
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select *
from  [ODM_required_data]

12 个解决方案

#1


SQL SERVER 和EXCEL的数据导入导出
1、在SQL SERVER里查询Excel数据:
-- ======================================================
SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT * 
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------

2、将Excel的数据导入SQL server :
-- ======================================================
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
实例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------

3、将SQL SERVER中查询到的数据导成一个Excel文件
-- ======================================================
T-SQL代码:
EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式
实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中应用ADO导出EXCEL文件代码: 
Dim cn  As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
------------------------------------------------------------------------------------------------

4、在SQL SERVER里往Excel插入数据:
-- ======================================================
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)

T-SQL代码:
INSERT INTO  
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  
(bestand, produkt) VALUES (20, 'Test')  

#2


引用楼主 zuiaimilan 的帖子:
我想把数据库DOT中一个表ODM_required_data里的数据导出到我自己建好的一个EXCEL表test.xls的sheet1中,表头已事先建好,和表ODM_required_data里的数据列一致,可是导完后出现错误,第一列的数据不是表ODM_required_data中对应的第一列的数据,而是第三列的数据,其他列的数据也相互窜了,大家说说为什么啊?下面是存储过程的代码: 
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select * 
from  [ODM_required_data]


select 指定你的列 from [ODM_required_data] 试试

#3


EXEC master..xp_cmdshell 'bcp 数据库名.dbo.ODM_required_data out E:\test.xls -c -q -S"192.168.1.250" -U"develop" -P"12345"'

先用这个命令把数据导出来,然后你在这个表头再插入一行,把原来的表头copy过来,再粘贴入刚插入的空行

#4


insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 
select * 
from  [ODM_required_data]

#5


引用楼主 zuiaimilan 的帖子:
我想把数据库DOT中一个表ODM_required_data里的数据导出到我自己建好的一个EXCEL表test.xls的sheet1中,表头已事先建好,和表ODM_required_data里的数据列一致,可是导完后出现错误,第一列的数据不是表ODM_required_data中对应的第一列的数据,而是第三列的数据,其他列的数据也相互窜了,大家说说为什么啊?下面是存储过程的代码: 
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data…


你把
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select * 
from  [ODM_required_data]

改成
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select --按照excel表格里面列的顺序排列数据表的列名 
from  [ODM_required_data]

试试看,能行吗?

#6


我试过了 这回更邪了 不是从第2行开始复制数据了 从第1万多行开始了 还是不行啊  不知道问题出在哪?大家碰到过类似的问题吗?

#7


大家快救命呀  老板催的急呀!

#9


唉,空两行。

#10


楼上的能不能说具体点啊?

#11


引用 7 楼 zuiaimilan 的回复:
大家快救命呀  老板催的急呀!

把你现在的代码贴出来看看哦?还有就是运行结果写清楚

#12


代码就在最上边哦
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select * 
from  [ODM_required_data]  运行完后导入到excel的数据都导过去了,就是相互之间的列不对了,就是说以前数据表ODM_required_data中的a列是a列的数据,b列是b列的数据,到excel后a列里是b列的数据了,b列里是a列的数据了。大家碰到过这种情况没?

#1


SQL SERVER 和EXCEL的数据导入导出
1、在SQL SERVER里查询Excel数据:
-- ======================================================
SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT * 
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------

2、将Excel的数据导入SQL server :
-- ======================================================
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
实例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------

3、将SQL SERVER中查询到的数据导成一个Excel文件
-- ======================================================
T-SQL代码:
EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式
实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中应用ADO导出EXCEL文件代码: 
Dim cn  As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
------------------------------------------------------------------------------------------------

4、在SQL SERVER里往Excel插入数据:
-- ======================================================
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)

T-SQL代码:
INSERT INTO  
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  
(bestand, produkt) VALUES (20, 'Test')  

#2


引用楼主 zuiaimilan 的帖子:
我想把数据库DOT中一个表ODM_required_data里的数据导出到我自己建好的一个EXCEL表test.xls的sheet1中,表头已事先建好,和表ODM_required_data里的数据列一致,可是导完后出现错误,第一列的数据不是表ODM_required_data中对应的第一列的数据,而是第三列的数据,其他列的数据也相互窜了,大家说说为什么啊?下面是存储过程的代码: 
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select * 
from  [ODM_required_data]


select 指定你的列 from [ODM_required_data] 试试

#3


EXEC master..xp_cmdshell 'bcp 数据库名.dbo.ODM_required_data out E:\test.xls -c -q -S"192.168.1.250" -U"develop" -P"12345"'

先用这个命令把数据导出来,然后你在这个表头再插入一行,把原来的表头copy过来,再粘贴入刚插入的空行

#4


insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 
select * 
from  [ODM_required_data]

#5


引用楼主 zuiaimilan 的帖子:
我想把数据库DOT中一个表ODM_required_data里的数据导出到我自己建好的一个EXCEL表test.xls的sheet1中,表头已事先建好,和表ODM_required_data里的数据列一致,可是导完后出现错误,第一列的数据不是表ODM_required_data中对应的第一列的数据,而是第三列的数据,其他列的数据也相互窜了,大家说说为什么啊?下面是存储过程的代码: 
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data…


你把
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select * 
from  [ODM_required_data]

改成
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select --按照excel表格里面列的顺序排列数据表的列名 
from  [ODM_required_data]

试试看,能行吗?

#6


我试过了 这回更邪了 不是从第2行开始复制数据了 从第1万多行开始了 还是不行啊  不知道问题出在哪?大家碰到过类似的问题吗?

#7


大家快救命呀  老板催的急呀!

#8


#9


唉,空两行。

#10


楼上的能不能说具体点啊?

#11


引用 7 楼 zuiaimilan 的回复:
大家快救命呀  老板催的急呀!

把你现在的代码贴出来看看哦?还有就是运行结果写清楚

#12


代码就在最上边哦
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;DATABASE=D:\QA_Data\Jonny_Huang\DOT_Auto\Andy\test.xls',sheet1$) 
select * 
from  [ODM_required_data]  运行完后导入到excel的数据都导过去了,就是相互之间的列不对了,就是说以前数据表ODM_required_data中的a列是a列的数据,b列是b列的数据,到excel后a列里是b列的数据了,b列里是a列的数据了。大家碰到过这种情况没?