Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
umertahir
Posting Yak Master
154 Posts |
Posted - 2009-04-02 : 06:01:12
|
Hi All,I have a linked server established to read data from Ms Excel (.xls) file. The data in excel file is as follows:Columns: A B C D E F G H ......Row1: Langhill Herd - Calving RecordsRow2: Row3: Freeze_Brand Ear_Tag Lact_No Calving_Date Calving_WgtRow4: 1703 602027 2 30-Jan-09 652When I fetch the data into SQL using the following query it NULLs out some of the cells from Row3:SELECT *FROM FileUploadLocationForLanghill...Sheet1$ AS Sheet1$_1 Result:Langhill Herd - Calving Records F2 F3 F4 F5------------------------------- -- -- -- --NULL NULL NULL NULL NULLNULL Ear_Tag NULL NULL NULL1703 602027 2 2009-01-30 00:00:00.000 652Code of my linked server is:/****** Object: LinkedServer [FileUploadLocationForLanghill] Script Date: 04/02/2009 11:01:25 ******/EXEC master.dbo.sp_addlinkedserver @server = N'FileUploadLocationForLanghill', @srvproduct=N'Excel', @provider=N'Microsoft.Jet.OLEDB.4.0', @datasrc=N'D:\EvaluationsUnit\Langhill\LinkedServerFile\LinkedServerFile.xls', @provstr=N'Excel 8.0; IMEX=0' /* For security reasons the linked server remote logins password is changed with ######## */EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'FileUploadLocationForLanghill',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULLGOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'collation compatible', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'data access', @optvalue=N'true'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'dist', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'pub', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'rpc', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'rpc out', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'sub', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'connect timeout', @optvalue=N'0'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'collation name', @optvalue=nullGOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'lazy schema validation', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'query timeout', @optvalue=N'0'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghill', @optname=N'use remote collation', @optvalue=N'true' |
|
umertahir
Posting Yak Master
154 Posts |
Posted - 2009-04-02 : 09:09:22
|
Ok I have found a work around to the problem:When the Jet Provider determines that an Excel column contains mixed text and numeric data, the Jet Provider selects the "majority" data type and returns non-matching values as NULLs.If you use OPENROWSET query or linked server the idea is to use add the option IMEX=1. However, IMEX = 0 is used when you want to write something back to the Excel file.OPENROWSET Query:select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;database=d:\EvaluationsUnit\Langhill\LinkedServerFile\LinkedServerFile.xls; HDR=NO; IMEX=1;',' select * from [Sheet1$]') as a Linked Server Code:/****** Object: LinkedServer [FileUploadLocationForLanghillTest] Script Date: 04/02/2009 14:08:22 ******/EXEC master.dbo.sp_addlinkedserver @server = N'FileUploadLocationForLanghillTest', @srvproduct=N'Excel', @provider=N'Microsoft.Jet.OLEDB.4.0', @datasrc=N'D:\EvaluationsUnit\Langhill\LinkedServerFile\LinkedServerFile.xls', @provstr=N'Excel 8.0; IMEX=1' /* For security reasons the linked server remote logins password is changed with ######## */EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'FileUploadLocationForLanghillTest',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULLGOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'collation compatible', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'data access', @optvalue=N'true'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'dist', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'pub', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'rpc', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'rpc out', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'sub', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'connect timeout', @optvalue=N'0'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'collation name', @optvalue=nullGOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'lazy schema validation', @optvalue=N'false'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'query timeout', @optvalue=N'0'GOEXEC master.dbo.sp_serveroption @server=N'FileUploadLocationForLanghillTest', @optname=N'use remote collation', @optvalue=N'true' |
 |
|
|
|
|
|
|