Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

T-SQL:Ekspor ke file Excel baru

Sejauh ini, ini adalah pos terbaik untuk mengekspor ke excel dari SQL:

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

Mengutip dari pengguna madhivanan ,

Selain menggunakan DTS dan wizard Ekspor, kita juga dapat menggunakan kueri ini untuk mengekspor data dari SQL Server2000 ke Excel

Buat file Excel bernama pengujian yang memiliki header yang sama dengan kolom tabel dan gunakan kueri ini

1 Ekspor data ke file EXCEL yang ada dari tabel SQL Server

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

2 Ekspor data dari Excel ke tabel SQL Server baru

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

3 Ekspor data dari Excel ke tabel SQL Server yang ada (diedit)

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

4 Jika Anda tidak ingin membuat file EXCEL terlebih dahulu dan ingin mengekspor data ke sana, gunakan

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

(Sekarang Anda dapat menemukan file dengan data dalam format tabel)

5 Untuk mengekspor data ke file EXCEL baru dengan heading (nama kolom), buat prosedur berikut

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)

Setelah membuat prosedur, jalankan dengan memberikan nama database, nama tabel dan jalur file:

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

Ini adalah halaman 29 kekalahan tetapi itu karena orang lain menunjukkan berbagai cara lain serta orang-orang yang mengajukan pertanyaan seperti ini tentang cara melakukannya.

Ikuti utas itu sepenuhnya dan lihat berbagai pertanyaan yang diajukan orang dan bagaimana mereka diselesaikan. Saya mengambil sedikit pengetahuan hanya dengan membaca sekilas dan telah menggunakan sebagian darinya untuk mendapatkan hasil yang diharapkan.

Untuk memperbarui sel tunggal

Seorang anggota juga di sana Peter Larson memposting yang berikut:Saya pikir satu hal yang hilang di sini. Sangat bagus untuk dapat Mengekspor dan Mengimpor ke file Excel, tetapi bagaimana dengan memperbarui sel tunggal? Atau rentang sel?

Ini adalah prinsip bagaimana Anda mengelolanya

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

Anda juga dapat menambahkan rumus ke Excel menggunakan ini:

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'

Mengekspor dengan nama kolom menggunakan T-SQL

Anggota Mladen Prajdic juga memiliki entri blog tentang cara melakukan ini di sini

Referensi:www.sqlteam.com (btw ini adalah blog/forum yang sangat bagus untuk siapa saja yang ingin mendapatkan lebih banyak dari SQL Server). Untuk referensi kesalahan saya menggunakan ini

Kesalahan yang mungkin terjadi

Jika Anda mendapatkan kesalahan berikut:

Kemudian jalankan ini:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 Alasan Teratas Orang Pindah ke SaaS

  2. 4 Kegiatan Pemantauan Basis Data Utama Yang Harus Diketahui Setiap DBA

  3. datetime vs smalldatetime di SQL Server:Apa Bedanya?

  4. Ubah format Tanggal menjadi format DD/MMM/YYYY di SQL Server

  5. Kesalahan pembulatan SQL Server, Memberikan nilai yang berbeda