如何从Excel获取数据更新到sql server中

时间:2020-12-04 13:26:03
利用sql语句链接多张表得到一个查询结果,查询结果复制出保存到一个excel中。这个查询结果里面有很多栏位是空值,需要补进去,因为数据量很大,如果要在软件的应用界面里面一个个的补录非常麻烦,所以想通过excel一次性的覆盖sql中的数据。
具体情况是这样的
sql:  
select  a.1,a.2,b.3,b.4,b.5,c.6
from 表一 a
  join 表二 b
  join 表三 c
where ....

查询结果          a.2     a.5     b.3     b.4     b.7     c.3  
                  郭阳    AA      91      88      null     35
                  张三   null     95      81      2.5      25
                  李四    BB      96     null     3.5     null
                  王武    CC      95      87       5       40
                  赵柳    DD     null     82       4       50
然后复制到excel,在excel中把NULL值的数据全部都补充上,怎么才能把这些数据更新到相关的字段中呢?(实际中a.2这一列是唯一值。)
 

7 个解决方案

#1


LZ这个涉及多表,不可能直接一次多表更新。

只能针对数据与表的关系,分出来一个一个更新。

#2


貌似无须excel,直接利用表之间的关系更改数据即可.


建议你提供详细的资料:
例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。
这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。


#3


如果已有EXCEL表,可以通过链接服务器从其中获取数据,再更新到相应的表中去.

#4


链接服务器的处理:
exec sp_addlinkedserver 'sample','','Microsoft.Jet.OLEDB.4.0','e:\tb.xls','','EXCEL 8.0',''
go
select * from sample...[sheet1$]
go
exec sp_dropserver 'sample','droplogins'

#5


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')  

#6


引用 4 楼 qianjin036a 的回复:
链接服务器的处理:

SQL code
exec sp_addlinkedserver 'sample','','Microsoft.Jet.OLEDB.4.0','e:\tb.xls','','EXCEL 8.0',''
go
select * from sample...[sheet1$]
go
exec sp_dropserver 'sample','droplogins'
……


您能具体解释解释什么意思吗

#7


引用 5 楼 qianjin036a 的回复:
引用 3 楼 qianjin036a 的回复:
用链接服务器导出吧.或者干脆用导入导出向导去导.

用链接服务器:

SQL code
exec sp_addlinkedserver 'sample','EXCEL','Microsoft.Jet.OLEDB.4.0','e:\tb.xls','','EXCEL 8.0','sheet1'
go
insert into sample……


您好,我是想从数据库中把某个表直接导出到excel中,之前没有excel的。
对了,那个‘sample’是什么意思?

#1


LZ这个涉及多表,不可能直接一次多表更新。

只能针对数据与表的关系,分出来一个一个更新。

#2


貌似无须excel,直接利用表之间的关系更改数据即可.


建议你提供详细的资料:
例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。
这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。


#3


如果已有EXCEL表,可以通过链接服务器从其中获取数据,再更新到相应的表中去.

#4


链接服务器的处理:
exec sp_addlinkedserver 'sample','','Microsoft.Jet.OLEDB.4.0','e:\tb.xls','','EXCEL 8.0',''
go
select * from sample...[sheet1$]
go
exec sp_dropserver 'sample','droplogins'

#5


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')  

#6


引用 4 楼 qianjin036a 的回复:
链接服务器的处理:

SQL code
exec sp_addlinkedserver 'sample','','Microsoft.Jet.OLEDB.4.0','e:\tb.xls','','EXCEL 8.0',''
go
select * from sample...[sheet1$]
go
exec sp_dropserver 'sample','droplogins'
……


您能具体解释解释什么意思吗

#7


引用 5 楼 qianjin036a 的回复:
引用 3 楼 qianjin036a 的回复:
用链接服务器导出吧.或者干脆用导入导出向导去导.

用链接服务器:

SQL code
exec sp_addlinkedserver 'sample','EXCEL','Microsoft.Jet.OLEDB.4.0','e:\tb.xls','','EXCEL 8.0','sheet1'
go
insert into sample……


您好,我是想从数据库中把某个表直接导出到excel中,之前没有excel的。
对了,那个‘sample’是什么意思?