Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

T-SQL:Xuất sang tệp Excel mới

Đây là bài đăng tốt nhất để xuất sang excel từ SQL:

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

Để trích dẫn từ người dùng madhivanan ,

Ngoài việc sử dụng thuật sĩ DTS và Export, chúng tôi cũng có thể sử dụng truy vấn này để xuất dữ liệu từ SQL Server2000 sang Excel

Tạo một tệp Excel được đặt tên là kiểm tra có tiêu đề giống như tiêu đề của các cột trong bảng và sử dụng các truy vấn này

1 Xuất dữ liệu sang tệp EXCEL hiện có từ bảng SQL Server

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

2 Xuất dữ liệu từ Excel sang bảng SQL Server mới

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

3 Xuất dữ liệu từ Excel sang bảng SQL Server hiện có (đã chỉnh sửa)

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

4 Nếu bạn không muốn tạo trước tệp EXCEL và muốn xuất dữ liệu sang tệp đó, hãy sử dụng

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

(Bây giờ bạn có thể tìm thấy tệp có dữ liệu ở định dạng bảng)

5 Để xuất dữ liệu sang tệp EXCEL mới với tiêu đề (tên cột), hãy tạo quy trình sau

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)

Sau khi tạo thủ tục, hãy thực thi nó bằng cách cung cấp tên cơ sở dữ liệu, tên bảng và đường dẫn tệp:

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

Nó dài 29 trang nhưng đó là do những người khác chỉ ra nhiều cách khác nhau cũng như mọi người đặt câu hỏi giống như câu hỏi này về cách thực hiện.

Theo dõi hoàn toàn chủ đề đó và xem xét các câu hỏi khác nhau mà mọi người đã hỏi và cách chúng được giải quyết. Tôi đã thu thập được kha khá kiến ​​thức chỉ cần đọc lướt qua nó và đã sử dụng từng phần của nó để có được kết quả như mong đợi.

Để cập nhật các ô đơn

Một thành viên cũng ở đó Peter Larson đăng bài viết như sau:Tôi nghĩ rằng một điều còn thiếu ở đây. Thật tuyệt khi có thể Xuất và Nhập sang tệp Excel, nhưng cập nhật các ô đơn thì sao? Hay một loạt các ô?

Đây là nguyên tắc về cách bạn quản lý điều đó

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

Bạn cũng có thể thêm công thức vào Excel bằng cách sử dụng sau:

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'

Xuất với tên cột bằng T-SQL

Thành viên Mladen Prajdic cũng có một mục blog về cách thực hiện điều này tại đây

Tài liệu tham khảo: www.sqlteam.com (btw đây là một blog / diễn đàn tuyệt vời cho bất kỳ ai muốn khai thác thêm sức mạnh của SQL Server). Đối với lỗi tham chiếu, tôi đã sử dụng this

Các lỗi có thể xảy ra

Nếu bạn gặp lỗi sau:

Sau đó chạy cái này:

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. Đính kèm tệp MDF mà không có tệp LDF

  2. Chuyển đổi dữ liệu varBinary của SQL Server thành chuỗi C #

  3. datetimeoffset hibernate mapping

  4. Tại sao tôi gặp lỗi Kiểu dữ liệu Xml không được hỗ trợ trong các truy vấn phân tán khi truy vấn máy chủ được liên kết cho dữ liệu không phải xml?

  5. Cách hiển thị đối chiếu của cơ sở dữ liệu trong SQL Server (T-SQL)