2012-08-23 28 views
9

Bu excel sayfasını bir tabloya yerleştirmeye çalışıyorum, bu yüzden tabloya kendi bilgileriyle güncellemek için buna select deyimleri uygulayabilirim.Excel sayfasını bir komut dosyası kullanarak geçici tablo haline getirin

SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
      'Excel 8.0;Database=C:\PB.xlsx', 
      'SELECT * FROM [Sheet1$]') 

64 bit makineyi çalıştırıyorum. Mükemmel bir versiyon olan bir fikir yok.

Hata:

Msg 7399, Level 16, State 1, Line 1 The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" reported an error. The provider did not give any information about the 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)".

Excel'de 12.0 değişir;

xlsx dosyaları için

OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" returned message "Could not find installable ISAM.". 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)".

+0

ben o sürücü sunucuda yüklü olması gerekir çünkü bizim DBA tarafından söylendi bu hataları var. Senin üstünde yüklü mü? – Taryn

+0

@bluefeet Şu anda benim dizüstü bilgisayarım ve ekstra bir şey yüklemedim, bu yüzden 2008 R2'de değilse. o zaman Hayır. – Doomsknight

+0

Bazen bir 32764 bit ODBC sürücü uyumsuzluğu nedeniyle 7399 hatası oldu. Bir Excel çalışma sayfasındaki verileri SQL Server 2008 R2 64 bit'e okumaya çalışıyordum. Microsoft Jet.OleDB sürücüsü 32 bittir. Maalesef sorunu çözemedim ve excel dosyalarını okumak için 32 bitlik bir sunucu kurmak zorunda kaldım. 32 bit nedenle –

cevap

8

JET yerine ACE oledb sağlayıcısı kullanabilirsiniz.

  1. Jet motoru sunucuya yüklenmiş olmalıdır. MS Office'i sunucuya yüklemek onu sıralar.
  2. xls'nin yolu sunucuya göre değil, komutu çalıştırdığınız iş istasyonu değil
  3. SQL sunucu hizmetini çalıştıran hesabın xls'nin bulunduğu klasöre yazma erişimi olması gerekir. Olası bir çözüm temp değişen etmektir = ve (örneğin) c tmp = ortam hizmeti başlatma hesabının değişkenler (örn Yönetici.): \ Temp, daha sonra c üzerinde Tam Denetim etkinleştirmek: Herkes \ temp

4 ...

sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
GO 
RECONFIGURE; 
GO 

5 .... Bu özellikle herkes onlar ancak Benim için 1 olarak ayarlanması gerekir diyor düşünüyor, neden çalıştığını

Şimdi
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'AllowInProcess', 0 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.Jet.OLEDB.4.0', N'DynamicParameters', 0 
GO 

bilmiyorum onları sıfıra ayarlayarak, aşağıdaki SQL statüsü için hile yaptı SQL Server 2008R2 32bit ve M $ Ofisi 2007

Select * 
into [temp_table$] 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\temp\EXPENDITURE REPORT.xls;HDR=YES;IMEX=1', 
'SELECT * FROM [EXPENDITURE SHEET$]') 

Not üzerinde takım idare: Ben bilerek dosya adı ve çalışma sayfası adı hem bu yapılabileceğini göstermek için boşluk bir örneği kullandık.

Biz hiçbir sürümü ile Windows 8 64 bit makinede SQL Server Express 2012 vardı bir kutu vardı: başkası yaptım sonradan gibi bu yıl stumbles Her ihtimale karşı

+0

kullandım Sonunda csv dosyası, Ama iyi, detaylı, çok seçenekli bir cevap nedeniyle bunu doğru olarak işaretlemek. Diğer cevapta belirtildiği üzere – Doomsknight

+1

, sen adlarında boşluk kullanmak için bile 'Excel 8.0' –

+0

artı 1'den' Microsoft.ACE.OLEDB.12.0', deneyebilirsiniz. –

7

(Excel 2007-2010) Bu hatanın 5 olası nedeni vardır

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=C:\PB.xlsx', 
    'SELECT * FROM [Sheet1$]'); 
+0

Bunu bir satır 'OLE DB sağlayıcısı bağlantılı sunucu için "Microsoft.ACE.OLEDB.12.0" "(boş)" örneğini oluşturulamaz olsun.' – Doomsknight

+0

sunucuda yüklü Ofisi 2007+ olması gerektiğini söylemeyi unuttum ya bu bileşen: http://www.microsoft.com/en-us/download/details.aspx?id=23734 –

+0

ofisten 2010 var ..: | – Doomsknight

1

, bu benim için çalıştı ne Office yüklendi.İşte

benim saklı yordam ben kurulumu parçasıdır:

SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', search for 'Ad Hoc Distributed Queries' in SQL Server Books Online.

Biz değiştirdi:

(bunun altında SELECT deyiminin geri kalanı) Bu hata aldı

INSERT INTO OPENROWSET ('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=R:\Export Membership Database\Member_Export.xls;', 
'SELECT * FROM [combined$]') 

yapılandırma:

sp_configure 'show advanced options', 1; 
GO 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
GO 
RECONFIGURE; 
GO 

tekrar saklı yordam Ran ve sonra bu hata var:

The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.

bu yüklemek için gereken Bulunan: Bundan sonra

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c06b8369-60dd-4b64-a44b-84b371ede16d&displaylang=en

, bir cazibe gibi çalıştı!

İlgili konular