Dit is verreweg de beste post om vanuit SQL naar Excel te exporteren:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID =49926
Om te citeren van gebruiker madhivanan
,
Naast het gebruik van DTS en de exportwizard, kunnen we deze query ook gebruiken om gegevens van SQL Server2000 naar Excel te exporteren
Maak een Excel-bestand met de naam testing met dezelfde koppen als tabelkolommen en gebruik deze query's
1 Exporteer gegevens naar een bestaand EXCEL-bestand uit de SQL Server-tabel
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
2 Exporteer gegevens van Excel naar nieuwe SQL Server-tabel
select *
into SQLServerTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [Sheet1$]')
3 Gegevens exporteren vanuit Excel naar bestaande SQL Server-tabel (bewerkt)
Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [SheetName$]')
4 Als u vooraf geen EXCEL-bestand wilt maken en er gegevens naar wilt exporteren, gebruik dan
EXEC sp_makewebtask
@outputfile = 'd:\testing.xls',
@query = 'Select * from Database_name..SQLServerTable',
@colheaders =1,
@FixedFont=0,@lastupdated=0,@resultstitle='Testing details'
(Nu kunt u het bestand met gegevens in tabelvorm vinden)
5 Om gegevens naar een nieuw EXCEL-bestand met kop (kolomnamen) te exporteren, maakt u de volgende procedure
create procedure proc_generate_excel_with_columns
(
@db_name varchar(100),
@table_name varchar(100),
@file_name varchar(100)
)
as
--Generate column names as a recordset
declare @columns varchar(8000), @sql varchar(8000), @data_file varchar(100)
select
@columns=coalesce(@columns+',','')+column_name+' as '+column_name
from
information_schema.columns
where
[email protected]_name
select @columns=''''''+replace(replace(@columns,' as ',''''' as '),',',',''''')
--Create a dummy file to have actual data
select @data_file=substring(@file_name,1,len(@file_name)-charindex('\',reverse(@file_name)))+'\data_file.xls'
--Generate column names in the passed EXCEL file
set @sql='exec master..xp_cmdshell ''bcp " select * from (select '[email protected]+') as t" queryout "'[email protected]_name+'" -c'''
exec(@sql)
--Generate data in the dummy file
set @sql='exec master..xp_cmdshell ''bcp "select * from '[email protected]_name+'..'[email protected]_name+'" queryout "'[email protected]_file+'" -c'''
exec(@sql)
--Copy dummy file to passed EXCEL file
set @sql= 'exec master..xp_cmdshell ''type '[email protected]_file+' >> "'[email protected]_name+'"'''
exec(@sql)
--Delete dummy file
set @sql= 'exec master..xp_cmdshell ''del '[email protected]_file+''''
exec(@sql)
Nadat u de procedure hebt gemaakt, voert u deze uit door de databasenaam, de tabelnaam en het bestandspad op te geven:
EXEC proc_generate_excel_with_columns 'your dbname', 'your table name','your file path'
Het zijn maar liefst 29 pagina's, maar dat komt omdat anderen verschillende andere manieren laten zien, evenals mensen die vragen stellen zoals deze over hoe het moet.
Volg die draad helemaal en kijk naar de verschillende vragen die mensen hebben gesteld en hoe ze zijn opgelost. Ik heb behoorlijk wat kennis opgepikt door het gewoon te skimmen en heb delen ervan gebruikt om de verwachte resultaten te krijgen.
Om afzonderlijke cellen bij te werken
Een lid daar ook Peter Larson post het volgende:Ik denk dat hier één ding ontbreekt. Het is geweldig om te kunnen exporteren en importeren naar Excel-bestanden, maar hoe zit het met het bijwerken van afzonderlijke cellen? Of een celbereik?
Dit is het principe van hoe je dat doet
update OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\test.xls;hdr=no',
'SELECT * FROM [Sheet1$b7:b7]') set f1 = -99
U kunt hiermee ook formules aan Excel toevoegen:
update OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\test.xls;hdr=no',
'SELECT * FROM [Sheet1$b7:b7]') set f1 = '=a7+c7'
Exporteren met kolomnamen met T-SQL
Lid Mladen Prajdic heeft ook een blogartikel over hoe je dit kunt doen hier
Referenties:www.sqlteam.com (dit is trouwens een uitstekende blog / forum voor iedereen die meer uit SQL Server wil halen). Voor foutreferentie gebruikte ik dit
Fouten die kunnen optreden
Als u de volgende foutmelding krijgt:
Voer dit dan uit:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO