Openrowset on SQL Server 2008 R2 installed in Windows 2008 64 bit machine - sql

I'm trying to working with Openrowset on SQL Server 2008 R2 installed in Windows 2008 64 bit machine.When I execute the below query, i got an error like below.Please help me out.
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=E:\01112012.xls;','SELECT * FROM [Sheet1$]')
ERROR:
Msg 7403, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.Jet.OLEDB.4.0" has not been registered.

Have you installed: ->Microsoft Access Database Engine 2010 Redistributable
This download will install a set of components that facilitate the transfer of data between existing Microsoft Office files such as Microsoft Office Access 2010 (*.mdb and .accdb) files and Microsoft Office Excel 2010 (.xls, *.xlsx, and *.xlsb) files to other data sources such as Microsoft SQL Server. Connectivity to existing text files is also supported. ODBC and OLEDB drivers are installed for application developers to use in developing their applications with connectivity to Office file formats.

To run OPENROWSET in 64 bit version of windows.
1- Install AccessDatabaseEngine_x64.exe (Restart is required).
2- If you are using SQL Management Studio, run Management Studio as administrator. If you don’t run it as an administrator account you will have this error (Cannot initialize the data source object of OLE DB provider "MICROSOFT.ACE.OLEDB.12.0" for linked server "(null)".
3- Run this command to configure your Database
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE with override;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE with override;
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1
GO
EXEC master . dbo. sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1
GO
4- Don’t use ‘select * from sheet1$’ in OPENROWSET function. Try this code.
select * from OPENROWSET('MICROSOFT.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;DATABASE=D:\test.xlsx', sheet1$)
If still you have (32 bit) error, try to restart your SQL service and check your C:\Windows\Temp and see do you have access to this directory or not.

Related

Enabling 'Ole Automation Procedures' in SQL Server 2019

We are trying to enable 'Ole Automation Procedures' in Linux version of SQL Server 2019 and we tried everything what is advised to do and for example descried in this post: SQL Server blocked access to procedure 'sys.sp_OACreate' of component 'Ole Automation Procedures'
However we are getting:
Msg 15392, Level 16, State 2, Server server-name, Procedure SP_CONFIGURE, Line 166
The specified option 'Ole Automation Procedures' is not supported by this edition of SQL Server and cannot be changed using sp_configure.
We tried Developer and Evaluation editions.
Please advise how to enable Ole Automation Procedures in Linux version of SQL Server 2019.
Thank you.

How to access Database from other computer using sql query in sql server

I am using a SQL database residing on my local computer. I want to access a table from a database residing on another computer using SQL query.
I have been able to connect the remote database with my database and all its tables are shown in Enterprise manager on my local machine. I have added remote SQL Server in my local SQL Server.
When I use select statement in my local SQL server it gives the message database does not exist or access denied.
Any help in this would highly be appreciated.
EDITED
Select * from [ServerName].DatabaseName.dbo.tableName
Use OPENROWSET
Example
SELECT t.version FROM
OPENROWSET('SQLNCLI', 'server=Myserver;UID=xxxx;pwd=yyyy',
'select ##version version') t
Note:
SQLNCLI is the name of installed OLE DB provider
Datasource: {server=Myserver;UID=xxx;pwd=yyy}
You have to enable OPENROWSET by executing the following script:
sp_configure 'show advanced options', 1
reconfigure
go
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
OPENROWSET is like connecting to a linked server

SQL Query to import data from 50 Access ACCDB databases

I am new to SQL, so please forgive my ignorance. I downloaded the free version of SQL Server Express Edition 2014 and have a 32 bit machine. I'm using Microsoft SQL Server Mgmt Studio. I am trying to setup a process to either link to or import 50 Access tables that are in 50 individual Microsoft Access 2013 databases (updated weekly) into SQL. I currently do this in an Access 2013 db but I am trying to replace the process. I downloaded the free version of SQL Server Express Edition 2014 and have a 32 bit machine. I'm using Microsoft SQL Server Mgmt Studio on my PC. Below is the code I put together. however, this is the result in the message window:
Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
Configuration option 'Ad Hoc Distributed Queries' changed from 1 to 1. Run the RECONFIGURE statement to install.
Msg 7403, Level 16, State 1, Line 8
The OLE DB provider "Microsoft.Jet.OLEDB.12.0" has not been registered.
I am a newbie so I would greatly appreciate no assumptions in knowledge. Thank you.
sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE WITH OVERRIDE;
GO
INSERT INTO TEST2.dbo.MyTest
SELECT * FROM OPENDATASOURCE(
'Microsoft.Jet.OLEDB.12.0',
'Data Source="D:\data\EXCEPT2.accdb"')...Testtbl;
GO
Turns out I had to run the below code to get the sql to work. I also had changed 'Microsoft.Jet.OLEDB.12.0', to 'Microsoft.Jet.ACE.12.0',
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

Cannot read Excel file from SQL Server with multiple versions of SQL Server

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
Reading Excel
DECLARE #SQLconnect VARCHAR(8000)
SET #SQLconnect = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',
''Excel 8.0;Database=D:\WAGES.xlsx;'',
''SELECT * FROM [Sheet2$]'')'
EXEC (#SQLconnect)
Exception
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. The provider reported an unexpected catastrophic failure.
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Sometimes it gives error sometimes it goes in infinite loop of execution.
NOTE: I am getting this error after installing SQL Server 2008 R2 over SQL Server 2012.
OS: Windows 7 32-bit
SQL Server 2008 R2 and SQL Server 2012 installed
The SQL Server Error Message if a user have no rights for SQL Server TEMP directory:
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)"
returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider
"Microsoft.Jet.OLEDB.4.0" for linked server "(null)".
Grant rigths to TEMP directory
(i.) This step is required only for 32-bit SQL Server with any OLE DB provider
The main problem is that an OLE DB provider creates a temporary file during the query in the SQL Server temp directory using credentials of a user who run the query.
The default directory for SQL Server is a default directory for SQL Server service account.
If SQL Server is run under Network Service account the temp directory is like:
C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
If SQL Server is run under Local Service account the temp directory is like:
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp
Microsoft recommends two ways for the solution:
A change of SQL Server TEMP directory and a grant of full rights for all users to this directory.
Grant of read/write rights to the current SQL Server TEMP directory.
See details: PRB: "Unspecified error" Error 7399 Using OPENROWSET Against Jet Database
Usually only few accounts are used for import operations. So we can just add rights for these accounts.
For example, icacls utility can be used for the rights setup:
icacls C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp /grant vs:(R,W)
For more information follow this Link
Try these settings
Open SQL Server Configuration Manager.
Select the SQL Server Services folder in the left pane.
Right-click the SQL Server (MSSQLSERVER) service in the right pane.
Click Properties.
Click the Advanced tab in the properties dialog that pops up.
Add “-g512;” to the front of the value for parameter “Startup Parameters”.
Click OK.

SQL to Access linked server

I am trying to add a linked server to a Access database. I am using the following SQL code to do this.
exec sp_addlinkedserver
#server = 'Test',
#provider = 'Microsoft.Jet.OLEDB.4.0',
#srvproduct = 'OLE DB Provider for Jet',
#datasrc = '\\srv\public$\CM Database\Data\sysConfig_dat.mdb'
go
EXEC sp_addlinkedsrvlogin Test, FALSE, Null, Admin, Null
but when i run this...
select * from Test...tblProduct
i get this error...
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. what
am i doing wrong?
I am using SQL Server Management Studio 2008 on a 32 bit system.
I figured it out...
The server running SQL Server is a 64Bit machine. The typical data connectivity component drivers did not work with this machine (ie the download that installs the Microsoft.Jet.OleDB.4.0 as a provider). I had to download the components for Access 2010 which has a 64Bit option.
Download from here
That installs the Microsoft.ACE.OLEDB.12.0 as a provider and I can use the SQL command that BradBenning mentioned in his post.
Try using the Microsoft ACE OLEDB provider:
EXEC sp_addlinkedserver
#server = 'Test'
,#provider = 'Microsoft.ACE.OLEDB.12.0'
,#datasrc = '\\srv\public$\CM Database\Data\sysConfig_dat.mdb'
,#srvproduct='Access'
GO