Detta är det överlägset bästa inlägget för att exportera till Excel från SQL:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID =49926
Att citera från användaren madhivanan
,
Förutom att använda DTS och exportguiden kan vi också använda den här frågan för att exportera data från SQL Server2000 till Excel
Skapa en Excel-fil med namnet testning med samma rubriker som för tabellkolumner och använd dessa frågor
1 Exportera data till befintlig EXCEL-fil från SQL Server-tabellen
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
2 Exportera data från Excel till ny SQL Server-tabell
select *
into SQLServerTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [Sheet1$]')
3 Exportera data från Excel till befintlig SQL Server-tabell (redigerad)
Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [SheetName$]')
4 Om du inte vill skapa en EXCEL-fil i förväg och vill exportera data till den, använd
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 hitta filen med data i tabellformat)
5 För att exportera data till en ny EXCEL-fil med rubrik (kolumnnamn), skapa följande procedur
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 skapat proceduren, kör den genom att ange databasnamn, tabellnamn och filsökväg:
EXEC proc_generate_excel_with_columns 'your dbname', 'your table name','your file path'
Det är häpnadsväckande 29 sidor men det beror på att andra visar olika andra sätt och att människor ställer frågor precis som den här om hur man gör det.
Följ den tråden helt och hållet och titta på de olika frågorna folk har ställt och hur de löses. Jag fick en hel del kunskap bara genom att skumma det och har använt delar av det för att få förväntade resultat.
För att uppdatera enskilda celler
En medlem också där Peter Larson skriver följande:Jag tror att en sak saknas här. Det är bra att kunna exportera och importera till Excel-filer, men vad sägs om att uppdatera enstaka celler? Eller en rad celler?
Detta är principen för hur du hanterar 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 också lägga till formler till Excel med detta:
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'
Exportera med kolumnnamn med T-SQL
Medlemmen Mladen Prajdic har också ett blogginlägg om hur man gör detta här
Referenser:www.sqlteam.com (btw detta är en utmärkt blogg / forum för alla som vill få ut mer av SQL Server). För felreferenser använde jag det här
Fel som kan uppstå
Om du får följande felmeddelande:
Kör sedan detta:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO