Importing .XLSX excel file using OPENROWSET into SQL 2000 table - sql-server-2000

Hi I can successfully import an .XLS excel file data into a table of SQL server 2000, like this:-
SELECT * INTO tblCustReports FROM
OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Customer Reports.xls',
'SELECT * FROM [Sheet1$]')
But the same I'm unable to do if the excel file is in .XLSX format.
Any suggestion?
For my question, I tried this:-
SELECT * INTO tblCustReports FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0 Xml;HDR=YES;Database=C:\Customer Reports.xlsx',
'SELECT * FROM [sheet1$]')
But getting this error:-
Server: Msg 7403, Level 16, State 1, Line 28
Could not locate registry entry for OLE DB provider
'Microsoft.ACE.OLEDB.12.0'. OLE DB error trace [Non-interface error:
Provider not registered.].
Thanks

Look at the difference between your providers..
Also, look at the difference between your versions of Excel..
SQL 2000 is quite old and would only support older versions of Excel.
if you want to use a newer version of Excel, you are going to have to save as in a legacy file format. Save the file as xls and not xlsx.. The main difference is that the version of office that saves in xlsx uses compression in the file format.
HTH,
Kent

Related

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Syntax error in JOIN operation."

I am getting this annoying error, but the thing is that I do not use any JOIN operation in my query. Here is the snippet:
('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\Users\tcmnoc\Desktop\Test.xlsx;','SELECT * FROM ([TradeCloud].[dbo].[Adminlist]')
Select * from [TradeCloud].[dbo].[Adminlist]```
Assuming your snippet derives from an OPENROWSET query, you are conflating data sources where you attempt to reference an SQL Server table inside an Excel connection. When connecting to an Excel workbook as a data source, you can only reference Excel worksheets, not SQL Server tables.
Therefore, this source is not recognizable: [TradeCloud].[dbo].[Adminlist] (correcting the opening parenthesis with square bracket). Instead, connect to an actual Excel worksheet within the workbook connection, placing the named reference outside of the connection string. Below query (after you adjust mySheet should work to retrieve Excel-only data):
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=C:\Users\tcmnoc\Desktop\Test.xlsx;',
[mySheet])
Without fuller context, I consider the following assumptions:
Maybe Excel is connected to the [TradeCloud].[dbo].[Adminlist] table? If so, you need to make a separate, direct connection to the database and schema to access the table (bypassing Excel which is just another client connection).
Maybe you meant to populate an existing SQL Server table? If so, run the needed append or create-table command then browse its contents:
-- APPEND TO TABLE
INSERT INTO [TradeCloud].[dbo].[Adminlist] (Col1, Col2, Col3, ...)
SELECT xl.Col1, xl.Col2, xl.Col3, ...
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=C:\Users\tcmnoc\Desktop\Test.xlsx;',
[mySheet]) xl;
-- CREATE TABLE
SELECT xl.Col1, xl.Col2, xl.Col3, ...
INTO [TradeCloud].[dbo].[Adminlist]
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=C:\Users\tcmnoc\Desktop\Test.xlsx;',
[mySheet]) xl;
-- BROWSE CONTENTS
SELECT * [TradeCloud].[dbo].[Adminlist];
Maybe you are attempting to populate an Excel workbook? If so, do note, these commands (OPENROWSET and OPENDATASOURCE) do not populate an existing Excel workbook but simply connects to external sources (Excel, Access, or other data sources) as a backend to retrieve data.

Import Access Table to MS sql using openrow set

Im trying to import an access table to sql using openrowset function. I can get it to work with excel but have not manged to get it working with Access. I've a load of tables which would be time consuming to do via wizard. This is the code I have so far
select * into input_2013.[sample] from openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=W:\Projects\Sample.xlsx;HDR=yes', 'SELECT * FROM [sheet1$a2:t]');
Your code is for Excel, maybe if you posted the code you had tried so far for Access and not managed to get working it would help?
You could try something along these lines:
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'W:\Projects\test.mdb';'admin';'', MyData);
Note that you need to provide a username/ password as well as the file name.

DTS .xls import;

I'm new to DTS and wwas wondering if there was anyone who have had some experience with SQL on a server. I'm having an issue with the SQL Server Import and Export Wizard. I've messed with the syntax and I've messed with it and I keep getting the same error. Here is what I'm working with as it stands right now:
INSERT INTO stores
SELECT *
FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;IMEX=1;HDR=NO;DATABASE=L:\ITS\storedata.xls',
'Select * FROM [storedata$]'
);
Does anybody have any idea? I can give more information if needed....

Export data to existing EXCEL file from SQL Server table

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\contact.xls;',
'SELECT * FROM [$Sheet1]')
select * from Persons
This code not working..It is giving the error
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" returned
message "The Microsoft Jet database engine could not find the object '$Sheet1'.
Make sure the object exists and that you spell its name and the path
name correctly.".
Msg 7350, Level 16, State 2, Line 2
Cannot get the column information from OLE DB provider "Microsoft.Jet.OLEDB.4.0"
for linked server "(null)".
Please help
It turns out that The Microsoft Jet database engine could not find the object '$Sheet1', and so you should Make sure the object exists and that you spell its name and the path name correctly.
Identify the name of the sheet you are trying to "connect" to. Have a look at the picture above. The standard sheets are called "Sheet1" to "Sheet3". Your workbook under D:\contact.xls probably has custom names. Use the name you find there and add a $ to the end of it.
'SELECT * FROM [Sheet1$]'

How do you transfer or export SQL Server 2005 data to Excel

I have a simple SQL 'Select' query, and I'd like to dump the results into an Excel file. I'm only able to save as .csv and converting to .xls creates some super ugly output. In any case, as far as I can tell (using Google) this doesn't seem to be so straight forward. Any help would be greatly appreciated.
SSIS is a no-brainer for doing stuff like this and is very straight forward (and this is just the kind of thing it is for).
Right-click the database in SQL Management Studio
Go to Tasks and then Export data, you'll then see an easy to use wizard.
Your database will be the source, you can enter your SQL query
Choose Excel as the target
Run it at end of wizard
If you wanted, you could save the SSIS package as well (there's an option at the end of the wizard) so that you can do it on a schedule or something (and even open and modify to add more functionality if needed).
Use "External data" from Excel. It can use ODBC connection to fetch data from external source: Data/Get External Data/New Database Query
That way, even if the data in the database changes, you can easily refresh.
I've found an easy way to export query results from SQL Server Management Studio 2005 to Excel.
1) Select menu item Query -> Query Options.
2) Set check box in Results -> Grid -> Include column headers when copying or saving the results.
After that, when you Select All and Copy the query results, you can paste them to Excel, and the column headers will be present.
See this
This is by far the best post for exporting to excel from SQL:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=49926
To quote from user madhivanan,
Apart from using DTS and Export wizard, we can also use this query to export data from SQL Server2000 to Excel
Create an Excel file named testing having the headers same as that of table columns and use these queries
1 Export data to existing EXCEL file from SQL Server table
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
2 Export data from Excel to new SQL Server table
select *
into SQLServerTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [Sheet1$]')
3 Export data from Excel to existing SQL Server table
Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [SheetName$]')
4 If you dont want to create an EXCEL file in advance and want to export data to it, use
EXEC sp_makewebtask
#outputfile = 'd:\testing.xls',
#query = 'Select * from Database_name..SQLServerTable',
#colheaders =1,
#FixedFont=0,#lastupdated=0,#resultstitle='Testing details'
(Now you can find the file with data in tabular format)
5 To export data to new EXCEL file with heading(column names), create the following procedure
create procedure proc_generate_excel_with_columns
(
#db_name varchar(100),
#table_name varchar(100),
#file_name varchar(100)
)
as
--Generate column names as a recordset
declare #columns varchar(8000), #sql varchar(8000), #data_file varchar(100)
select
#columns=coalesce(#columns+',','')+column_name+' as '+column_name
from
information_schema.columns
where
table_name=#table_name
select #columns=''''''+replace(replace(#columns,' as ',''''' as '),',',',''''')
--Create a dummy file to have actual data
select #data_file=substring(#file_name,1,len(#file_name)-charindex('\',reverse(#file_name)))+'\data_file.xls'
--Generate column names in the passed EXCEL file
set #sql='exec master..xp_cmdshell ''bcp " select * from (select '+#columns+') as t" queryout "'+#file_name+'" -c'''
exec(#sql)
--Generate data in the dummy file
set #sql='exec master..xp_cmdshell ''bcp "select * from '+#db_name+'..'+#table_name+'" queryout "'+#data_file+'" -c'''
exec(#sql)
--Copy dummy file to passed EXCEL file
set #sql= 'exec master..xp_cmdshell ''type '+#data_file+' >> "'+#file_name+'"'''
exec(#sql)
--Delete dummy file
set #sql= 'exec master..xp_cmdshell ''del '+#data_file+''''
exec(#sql)
After creating the procedure, execute it by supplying database name, table name and file path:
EXEC proc_generate_excel_with_columns 'your dbname', 'your table name','your file path'
Its a whomping 29 pages but that is because others show various other ways as well as people asking questions just like this one on how to do it.
Follow that thread entirely and look at the various questions people have asked and how they are solved. I picked up quite a bit of knowledge just skimming it and have used portions of it to get expected results.
To update single cells
A member also there Peter Larson posts the following:
I think one thing is missing here. It is great to be able to Export and Import to Excel files, but how about updating single cells? Or a range of cells?
This is the principle of how you do manage that
update OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\test.xls;hdr=no',
'SELECT * FROM [Sheet1$b7:b7]') set f1 = -99
You can also add formulas to Excel using this:
update OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\test.xls;hdr=no',
'SELECT * FROM [Sheet1$b7:b7]') set f1 = '=a7+c7'
Exporting with column names using T-SQL
Member Mladen Prajdic also has a blog entry on how to do this here
References: www.sqlteam.com (btw this is an excellent blog / forum for anyone looking to get more out of SQL Server).
If you are looking for ad-hoc items rather than something that you would put into SSIS. From within SSMS simply highlight the results grid, copy, then paste into excel, it isn't elegant, but works. Then you can save as native .xls rather than .csv
Here's a video that will show you, step-by-step, how to export data to Excel. It's a great solution for 'one-off' problems where you need to export to Excel:
Ad-Hoc Reporting
It's a LOT easier just to do it from within Excel.!!
Open Excel
Data>Import/Export Data>Import Data
Next to file name click "New Source" Button
On Welcome to the Data Connection Wizard, choose Microsoft SQL Server.
Click Next.
Enter Server Name and Credentials.
From the drop down, choose whichever database holds the table you need.
Select your table then Next.....
Enter a Description if you'd like and click Finish.
When your done and back in Excel, just click "OK"
Easy.
Create the excel data source and insert the values,
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
More informations are available here
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=49926
You could always use ADO to write the results out to the worksheet cells from a recordset object
A handy tool Convert SQL to Excel converts SQL table or SQL query result to Excel file without programming.
Main Features
- Convert/export a SQL Table to Excel file
- Convert/export multiple tables (multiple query results) to multiple Excel worksheets.
- Allow flexible TSQL query which can have multiple SELECT statements or other complex query statements.
B. Regards,
Alex
There exists several tools to export/import from SQL Server to Excel.
Google is your friend :-)
We use DbTransfer (which is one of those which can export a complete Database to an Excel file also) here: http://www.dbtransfer.de/Products/DbTransfer.
We have used the openrowset feature of sql server before, but i was never happy with it, becuase it's not very easy to use and lacks of features and speed...
Try the 'Import and Export Data (32-bit)' tool. Available after installing MS SQL Management Studio Express 2012.
With this tool it's very easy to select a database, a table or to insert your own SQL query and choose a destination (A MS Excel file for example).
you can right click on a grid of results in SQL server, and choose save as CSV. you can then you can import this into Excel.
Excel gives you a import wizard, ensure you select comma delimited. it works fine for me when i needed to import 50k+ records into excel.
Check this.
Query -> Query Options.
Results -> Grid -> Include column headers when copying or saving the results