I have an XLS file. Let's assume that it has 1000 rows in all, with 10 columns. I would like to import rows 5 through 995 (say), and columns 1 though 7 and 10. How can I do this using an SQL query, either though OPENROWSET or BULK INSERT? I am using SQL Server 2008.
            Asked
            
        
        
            Active
            
        
            Viewed 834 times
        
    3 Answers
0
            
            
        SELECT *
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;HDR=No;Database=c:\path\to\file.xls',
    'SELECT * FROM [Sheet1$A5:J995]'
);
        Anon
        
- 10,660
 - 1
 - 29
 - 31
 
- 
                    1Add an explanation to your answer so that the asker gets an idea of what this code does. – Chris Loonam Aug 23 '14 at 00:07
 
0
            
            
        I would approach this in a slightly different way.
I would import all the data into the database, into a temporary table. Then I would query that table, extracting the information that's needed.
Alternatively, you could look at a SSIS process to do this.
        Bravax
        
- 10,453
 - 7
 - 40
 - 68
 
- 
                    Thanks for the reply! Thing is, I would still need the row 5 to row 995 to work, as the last row is a summary and does not follow the format of the rows above it. Is there a way I can do this? Also, I would have to automate this process. I get a file everyday and it has to automatically upload it to the DB. Any tips there? How can I make it accept the new file daily and import it to the DB? – CodingInCircles Mar 11 '11 at 09:41
 - 
                    
 - 
                    1SQL Server Integration Services, it's probably what you need. So it can look at a spreadsheet, suck it's data into SQL, and modify it. Then you can schedule the process to run daily. – Bravax Mar 11 '11 at 09:46
 
0
            I had another idea.
You could also use a Linked Server which connects to the Excel document.
(This is probably an easier approach for you.)
        Bravax
        
- 10,453
 - 7
 - 40
 - 68
 
- 
                    @Bravax: I've used the OPENROWSET statement, but have/had no idea of how I can customise it to suit my requirements. Just to make my question clearer, I will be receiving a file on a daily basis. It may have anywhere between 450-800 rows. All I know is that I would like to extract only a select few columns, and take rows from the 4th or 5th one, right up till the row which ends about 5 rows from the end of the spreadsheet. And I need to automate the whole process. Any ideas? – CodingInCircles Mar 11 '11 at 11:23
 - 
                    Look at this article: http://support.microsoft.com/kb/321686, scroll down to the Use ADO and SQLOLEDB. Talk about comprehensive. – Bravax Mar 11 '11 at 11:31
 - 
                    Look at this article for how to skip certain rows: http://stackoverflow.com/questions/4929217/openrowset-for-excel-can-we-skip-several-rows – Bravax Mar 11 '11 at 11:33
 - 
                    
 - 
                    @Bravax: I tried that too! :( It didn't work! I put the column names as given in the XLS, and it didn't work.. Should this be done in code? Can what I want be done in code, rather than query? – CodingInCircles Mar 11 '11 at 11:44
 - 
                    This should go in your query, what are your column names? possibly use []'s round them. – Bravax Mar 11 '11 at 11:49
 - 
                    All done.. Still no luck.. :( It said column not found or some such error message. This despite the fact that I had "copy-pasted" from the XLS directly. – CodingInCircles Mar 11 '11 at 12:11