sql >> Database teknologi >  >> RDS >> Sqlserver

T-SQL:Eksporter til ny Excel-fil

Dette er langt det bedste indlæg til at eksportere til Excel fra SQL:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID =49926

At citere fra bruger madhivanan ,

Udover at bruge DTS og Export wizard, kan vi også bruge denne forespørgsel til at eksportere data fra SQL Server2000 til Excel

Opret en Excel-fil med navnet testing med samme overskrifter som tabelkolonner, og brug disse forespørgsler

1 Eksporter data til eksisterende EXCEL-fil fra 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 Eksporter data fra Excel til ny 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 Eksporter data fra Excel til eksisterende SQL Server-tabel (redigeret)

Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=D:\testing.xls;HDR=YES', 
    'SELECT * FROM [SheetName$]')

4 Hvis du ikke ønsker at oprette en EXCEL-fil på forhånd og vil eksportere data til den, skal du bruge

EXEC sp_makewebtask 
    @outputfile = 'd:\testing.xls', 
    @query = 'Select * from Database_name..SQLServerTable', 
    @colheaders =1, 
    @FixedFont=0,@lastupdated=0,@resultstitle='Testing details'

(Nu kan du finde filen med data i tabelformat)

5 For at eksportere data til en ny EXCEL-fil med overskrift (kolonnenavne), skal du oprette følgende 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)

Når du har oprettet proceduren, skal du udføre den ved at angive databasenavn, tabelnavn og filsti:

EXEC proc_generate_excel_with_columns 'your dbname', 'your table name','your file path'

Det er hele 29 sider, men det er fordi andre viser forskellige andre måder såvel som folk stiller spørgsmål som denne om, hvordan man gør det.

Følg hele tråden og se på de forskellige spørgsmål, folk har stillet, og hvordan de løses. Jeg opsamlede en del viden ved at skimme det og har brugt dele af det til at få forventede resultater.

For at opdatere enkelte celler

Et medlem der også Peter Larson skriver følgende:Jeg synes, der mangler en ting her. Det er fantastisk at kunne eksportere og importere til Excel-filer, men hvad med at opdatere enkelte celler? Eller en række celler?

Dette er princippet om, hvordan du klarer det

update OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=c:\test.xls;hdr=no', 
'SELECT * FROM [Sheet1$b7:b7]') set f1 = -99

Du kan også tilføje formler til Excel ved at bruge denne:

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'

Eksport med kolonnenavne ved hjælp af T-SQL

Medlemmet Mladen Prajdic har også et blogindlæg om, hvordan man gør dette her

Referencer:www.sqlteam.com (btw dette er en fremragende blog / forum for alle, der ønsker at få mere ud af SQL Server). Til fejlhenvisning brugte jeg dette

Fejl, der kan opstå

Hvis du får følgende fejlmeddelelse:

Kør derefter dette:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO


  1. Database backup kryptering - bedste praksis

  2. hvordan man bruger hvis ikke eksisterer, mens man indsætter en række mysql

  3. Få advarsel:Nulværdi elimineres af en samlet eller anden SET-operation

  4. Oracle - Venstre ydre joinforbindelse med where-klausul