sql >> Database >  >> RDS >> Sqlserver

T-SQL:Exporteren naar nieuw Excel-bestand

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


  1. Postgres:haal min en max rijen op in veel-op-veel relatietabel

  2. mysql voorwaardelijk invoegen - indien niet bestaat invoegen

  3. Hoe de databaseconfiguratieparameter te lezen met behulp van het eigenschappenbestand in de slaapstand

  4. Selecteer N vorige en M volgende items rond huidige item-ID