sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL:Exportera till ny Excel-fil

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


  1. MYSQL INNER JOIN med möjliga tomma fält

  2. Jag får bara en uppsättning resultat när jag försöker använda mysql_fetch_array()

  3. Hur går man med i ResultSet-objekt i java?

  4. Alternativknappen skickar inte värde till MySQL-databasen