C'est de loin le meilleur article pour exporter vers Excel à partir de SQL :
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID =49926
Pour citer l'utilisateur madhivanan
,
Outre l'utilisation de DTS et de l'assistant d'exportation, nous pouvons également utiliser cette requête pour exporter des données de SQL Server2000 vers Excel
Créez un fichier Excel nommé testing ayant les mêmes en-têtes que ceux des colonnes du tableau et utilisez ces requêtes
1 Exporter les données vers un fichier EXCEL existant à partir de la table SQL Server
insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;',
'SELECT * FROM [SheetName$]') select * from SQLServerTable
2 Exporter des données d'Excel vers une nouvelle table SQL Server
select *
into SQLServerTable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [Sheet1$]')
3 Exporter des données d'Excel vers une table SQL Server existante (modifiée)
Insert into SQLServerTable Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\testing.xls;HDR=YES',
'SELECT * FROM [SheetName$]')
4 Si vous ne souhaitez pas créer un fichier EXCEL à l'avance et souhaitez y exporter des données, utilisez
EXEC sp_makewebtask
@outputfile = 'd:\testing.xls',
@query = 'Select * from Database_name..SQLServerTable',
@colheaders =1,
@FixedFont=0,@lastupdated=0,@resultstitle='Testing details'
(Vous pouvez maintenant trouver le fichier avec les données sous forme de tableau)
5 Pour exporter des données vers un nouveau fichier EXCEL avec en-tête (noms de colonne), créez la procédure suivante
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)
Après avoir créé la procédure, exécutez-la en fournissant le nom de la base de données, le nom de la table et le chemin du fichier :
EXEC proc_generate_excel_with_columns 'your dbname', 'your table name','your file path'
C'est un énorme 29 pages, mais c'est parce que d'autres montrent diverses autres façons ainsi que des gens qui posent des questions comme celle-ci sur la façon de le faire.
Suivez ce fil entièrement et regardez les différentes questions que les gens ont posées et comment elles sont résolues. J'ai acquis pas mal de connaissances en les parcourant et j'en ai utilisé des parties pour obtenir les résultats escomptés.
Pour mettre à jour des cellules individuelles
Un membre également là-bas, Peter Larson, poste ce qui suit :Je pense qu'il manque une chose ici. C'est formidable de pouvoir exporter et importer des fichiers Excel, mais qu'en est-il de la mise à jour de cellules individuelles ? Ou une plage de cellules ?
C'est le principe de la façon dont vous gérez cela
update OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\test.xls;hdr=no',
'SELECT * FROM [Sheet1$b7:b7]') set f1 = -99
Vous pouvez également ajouter des formules à Excel en utilisant ceci :
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'
Exportation avec des noms de colonne à l'aide de T-SQL
Le membre Mladen Prajdic a également une entrée de blog sur la façon de procéder ici
Références :www.sqlteam.com (c'est un excellent blog / forum pour tous ceux qui cherchent à tirer le meilleur parti de SQL Server). Pour le référencement des erreurs, j'ai utilisé ceci
Erreurs pouvant survenir
Si vous obtenez l'erreur suivante :
Ensuite, lancez ceci :
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO