Toto je zdaleka nejlepší příspěvek pro export do Excelu z SQL:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID =49926
Cituji od uživatele madhivanan
,
Kromě použití DTS a Průvodce exportem můžeme tento dotaz použít také k exportu dat z SQL Server2000 do Excelu
Vytvořte soubor aplikace Excel s názvem testing se záhlavími stejnými jako záhlaví sloupců tabulky a použijte tyto dotazy
1 Exportujte data do existujícího souboru EXCEL z tabulky SQL Server
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
2 Exportujte data z Excelu do nové SQL Server tabulky
select *
into SQLServerTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [Sheet1$]')
3 Exportujte data z Excelu do existující tabulky SQL Serveru (upraveno)
Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [SheetName$]')
4 Pokud nechcete soubor EXCEL vytvářet předem a chcete do něj exportovat data, použijte
EXEC sp_makewebtask
@outputfile = 'd:\testing.xls',
@query = 'Select * from Database_name..SQLServerTable',
@colheaders =1,
@FixedFont=0,@lastupdated=0,@resultstitle='Testing details'
(Nyní můžete najít soubor s daty v tabulkovém formátu)
5 Chcete-li exportovat data do nového souboru EXCEL s nadpisem (názvy sloupců), vytvořte následující postup
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)
Po vytvoření proceduru spusťte zadáním názvu databáze, názvu tabulky a cesty k souboru:
EXEC proc_generate_excel_with_columns 'your dbname', 'your table name','your file path'
Je to neuvěřitelných 29 stránek, ale to je proto, že ostatní ukazují různé jiné způsoby, stejně jako lidé, kteří kladou otázky, jako je tento, jak to udělat.
Sledujte celé toto vlákno a podívejte se na různé otázky, které lidé položili, a na to, jak byly vyřešeny. Nasbíral jsem docela dost znalostí pouhým letmým procházením a části z nich jsem použil k dosažení očekávaných výsledků.
Aktualizace jednotlivých buněk
Také tamní člen Peter Larson uvádí následující:Myslím, že zde chybí jedna věc. Je skvělé, že můžete exportovat a importovat soubory aplikace Excel, ale co takhle aktualizovat jednotlivé buňky? Nebo rozsah buněk?
Toto je princip, jak to zvládnete
update OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\test.xls;hdr=no',
'SELECT * FROM [Sheet1$b7:b7]') set f1 = -99
Vzorce můžete do Excelu přidat také pomocí tohoto:
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'
Export s názvy sloupců pomocí T-SQL
Člen Mladen Prajdic má také příspěvek na blogu o tom, jak to udělat zde
Reference:www.sqlteam.com (mimochodem toto je vynikající blog/fórum pro každého, kdo chce získat více z SQL Serveru). Pro odkazování na chyby jsem použil toto
Chyby, které se mohou vyskytnout
Pokud se zobrazí následující chyba:
Potom spusťte toto:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO