我需要将数据从Excel导入我的数据库。我需要将Excel表格中的数据插入数据库中的现有表格。
我尝试在sql向导的帮助下导入数据。首先我将其导入临时表,然后使用插入查询将数据导入到目标表中。但它似乎没有正常工作。
所以,PLZ建议我输入数据的好方法。如果你建议一些好的sql脚本进行导入也会更好。
答案 0 :(得分:3)
对于文件excel 2007版本(* .xlsx)
INSERT INTO MyTable
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=D:\test.xlsx', [Customer$])
对于文件excel 97-2003版本(* .xls)
INSERT INTO MyTable
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\test.xls', [Customer$])
答案 1 :(得分:1)
我尝试在.xlsx
文件(版本14.0.6112.2500 64位Microsoft Excel文件)上使用上一个答案
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\xls_to_sql\xltest.xlsx', [Sheet1$])
然后我将电子表格保存为.xls
(97-2003版本)并再次尝试。
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\xls_to_sql\xltest.xls', [Sheet1$])
Bot times我得到了同样的错误信息:
Msg 7308, Level 16, State 1, Line 1
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
SQL SERVER信息:
Microsoft SQL Server Management Studio 10.50.1617.0 Microsoft Analysis Services客户端工具10.50.1617.0 Microsoft数据访问 组件(MDAC)6.1.7601.17514 Microsoft MSXML 2.6 3.0 6.0 Microsoft Internet Explorer 9.0.8112.16421 Microsoft .NET Framework 2.0.50727.5448操作系统6.1.7601
我没有Microsoft.Jet.OLEDB.4.0或者至少我不知道如何获得它。如果这是导致问题的原因,我也不知道如何在32位模式下运行所有内容。我很感激帮助在32位模式下运行,如果我由于某种原因没有安装它,也会下载并安装Microsoft.Jet.OLEDB.4.0。
我尝试了我为SQL Server 2005发布的链接服务器方法,但是没有教程中提到的Microsoft.Jet.OLEDB.4.0选项。请参阅http://support.microsoft.com/kb/321686。
答案 2 :(得分:0)
你没有在表和excel文件中提及你现有的表和键的任何内容,所以只是为了给你一个推送,跟随命令选择xltest.xls文件表中的所有数据('customrs')
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])
从这一点来说,由数据库结构决定如何导入/合并到现有数据。
答案 3 :(得分:0)
首先将电子表格保存为.xls(97-2003版本)格式,然后将它们导入临时文件中的SQL。导入这些数据后,请确保临时表字段长度与原始字段长度相似。
然后使用以下语句更新原始表
insert into orginal (field1, field2)
select field1, field2 from temp
答案 4 :(得分:0)
我通常有三种方法。
bcp
[dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^|
> log1.txt
答案 5 :(得分:0)
如果需要将.xlsx导入64位SQL Server,请尝试安装64位Microsoft Access数据库引擎。
请参阅http://www.microsoft.com/en-us/download/details.aspx?id=13255
例如,要从c:\ data.xlsx导入数据,该数据有一个名为MyData的工作表,那么您可以使用:
SELECT *
FROM OPENROWSET ( 'Microsoft.ACE.OLEDB.12.0'
, 'Excel 12.0;database=c:\data.xlsx;IMEX=1'
, 'SELECT * FROM [MyData$]')