Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL:Export in neue Excel-Datei

Dies ist bei weitem der beste Beitrag zum Exportieren nach Excel aus SQL:

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

Um von Benutzer madhivanan zu zitieren ,

Abgesehen von der Verwendung von DTS und dem Exportassistenten können wir diese Abfrage auch verwenden, um Daten von SQL Server2000 nach Excel zu exportieren

Erstellen Sie eine Excel-Datei mit dem Namen Testing, deren Kopfzeilen denen der Tabellenspalten entsprechen, und verwenden Sie diese Abfragen

1 Daten aus der SQL Server-Tabelle in eine vorhandene EXCEL-Datei exportieren

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

2 Exportieren Sie Daten aus Excel in eine neue SQL Server-Tabelle

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

3 Exportieren Sie Daten aus Excel in eine vorhandene SQL Server-Tabelle (bearbeitet)

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

4 Wenn Sie keine EXCEL-Datei im Voraus erstellen und Daten dorthin exportieren möchten, verwenden Sie

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

(Jetzt finden Sie die Datei mit den Daten im Tabellenformat)

5 Um Daten in eine neue EXCEL-Datei mit Überschrift (Spaltennamen) zu exportieren, erstellen Sie das folgende Verfahren

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)

Nachdem Sie die Prozedur erstellt haben, führen Sie sie aus, indem Sie den Datenbanknamen, den Tabellennamen und den Dateipfad angeben:

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

Es sind satte 29 Seiten, aber das liegt daran, dass andere verschiedene andere Wege zeigen und Leute Fragen wie diese stellen, wie man es macht.

Folgen Sie diesem Thread vollständig und sehen Sie sich die verschiedenen Fragen an, die die Leute gestellt haben, und wie sie gelöst werden. Ich habe mir ziemlich viel Wissen angeeignet, indem ich es nur überflogen habe, und habe Teile davon verwendet, um die erwarteten Ergebnisse zu erzielen.

Um einzelne Zellen zu aktualisieren

Ein ebenfalls dortiges Mitglied Peter Larson postet folgendes:Ich denke, hier fehlt eine Sache. Es ist großartig, in Excel-Dateien exportieren und importieren zu können, aber wie wäre es mit dem Aktualisieren einzelner Zellen? Oder eine Reihe von Zellen?

Dies ist das Prinzip, wie Sie das handhaben

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

Sie können Formeln auch folgendermaßen zu Excel hinzufügen:

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'

Exportieren mit Spaltennamen mit T-SQL

Mitglied Mladen Prajdic hat auch einen Blog-Eintrag, wie man das macht hier

Referenzen:www.sqlteam.com (Übrigens ist dies ein ausgezeichnetes Blog/Forum für jeden, der mehr aus SQL Server herausholen möchte). Zur Fehlerreferenzierung habe ich dies verwendet wird

Fehler, die auftreten können

Wenn Sie die folgende Fehlermeldung erhalten:

Führen Sie dann Folgendes aus:

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