Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Server export to Excel with OPENROWSET

I am successfully exporting to excel with the following statement:

insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=C:\template.xls;', 
'SELECT * FROM [SheetName$]') 
select * from myTable

Is there any standard way to use this template specifying a new name for the excel sheet so that the template never gets written to or do I have to come up with some work-around?

What's the best way to do this in people experience?

like image 245
JohnIdol Avatar asked Mar 01 '23 17:03

JohnIdol


2 Answers

You'd have to use dynamic SQL. OPENROWSET etc only allows literals as parameters.

DECLARE @myfile varchar(800)

SET @myfile = 'C:\template.xls'

EXEC ('
insert into OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', 
''Excel 8.0;Database=' + @myfile + ';'', 
''SELECT * FROM [SheetName$]'') 
select * from myTable
')

Remember: the path is relative to where SQL Server is running

like image 105
gbn Avatar answered Mar 03 '23 05:03

gbn


Couldn't you make a copy of your template first, then pass the copy's filename into OPENROWSET?

like image 42
Seth Ladd Avatar answered Mar 03 '23 06:03

Seth Ladd