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

Cách gửi kết quả truy vấn qua email dưới dạng tệp đính kèm trong SQL Server (T-SQL)

Trong SQL Server, bạn có thể gửi email bằng sp_send_dbmail thủ tục được lưu trữ trong msdb cơ sở dữ liệu.

Một trong những lựa chọn bạn có khi thực hiện thủ tục này là có đưa vào kết quả của một truy vấn hay không.

Một lựa chọn khác mà bạn có là có nên gửi những kết quả đó dưới dạng tệp đính kèm hay không.

Ví dụ

Để gửi email kết quả của một truy vấn, hãy sử dụng @query đối số.

Để đính kèm những kết quả đó dưới dạng tệp đính kèm, hãy sử dụng @attach_query_result_as_file lý lẽ. Điều này được chấp nhận một bit giá trị, với mặc định là 0 (không có tệp đính kèm).

Để gửi kết quả dưới dạng tệp đính kèm, chỉ cần cung cấp 1 cho đối số này.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Potential candidates for an Admin job, perhaps?',
    @query = 'SELECT TOP(5) * FROM Artists;',
    @execute_query_database = 'Music',
    @attach_query_result_as_file = 1,
    @subject = 'Query results as discussed';

Ví dụ này sẽ gửi một email với kết quả được đính kèm dưới dạng .txt tập tin. Tên được tạo tự động bởi Thư cơ sở dữ liệu.

Theo mặc định, kích thước tệp tối đa cho tệp đính kèm là 1 MB cho mỗi tệp, nhưng bạn có thể thay đổi kích thước này bằng sysmail_configure_sp thủ tục được lưu trữ.

Cung cấp tên cho tệp đính kèm

Bạn cũng có tùy chọn cung cấp tên riêng của mình cho tệp đính kèm. Bạn có thể thực hiện việc này với @query_attachment_filename lý lẽ.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Potential candidates for an Admin job, perhaps?',
    @query = 'SELECT TOP(5) * FROM Artists;',
    @execute_query_database = 'Music',
    @attach_query_result_as_file = 1,
    @query_attachment_filename = 'Artists.csv',
    @subject = 'Query results as discussed';

Tùy chọn khác

Đây là một ví dụ khác mở rộng trên ví dụ trước. Ở đây, tôi đã đưa vào một số tùy chọn mà bạn có thể thấy hữu ích khi gửi kết quả truy vấn dưới dạng tệp đính kèm email.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Potential candidates for an Admin job, perhaps?',
    @query = 'SELECT TOP(5) * FROM Artists;',
    @execute_query_database = 'Music',
    @attach_query_result_as_file = 1,
    @query_attachment_filename = 'Artists.csv',
    @query_result_header = 1,
    @query_result_width = 256,
    @query_result_separator = ',',
    @exclude_query_output = 1,
    @append_query_error = 1,
    @query_no_truncate = 0,
    @query_result_no_padding = 1,
    @subject = 'Query results as discussed';

Một số trong số này được đặt thành giá trị mặc định và một số thì không. Ví dụ:tôi đã thay đổi @query_result_no_padding thành 1 để loại bỏ phần đệm từ bên trong các cột. Tôi cũng đã sử dụng @query_result_separator để thay đổi dấu phân cách từ khoảng trắng mặc định thành dấu phẩy.

sp_send_dbmail thủ tục chấp nhận nhiều đối số hơn tôi đã liệt kê ở đây. Xem tài liệu của Microsoft để biết danh sách đầy đủ các đối số và mô tả của chúng.

Định cấu hình Thư cơ sở dữ liệu

Các ví dụ trên trang này giả định rằng bạn đã bật và định cấu hình Thư cơ sở dữ liệu.

Nếu bạn chưa định cấu hình Thư cơ sở dữ liệu, hãy xem Cách gửi Email từ SQL Server. Bài viết đó cung cấp các ví dụ để bật và định cấu hình Thư cơ sở dữ liệu với T-SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Cải tiến OLTP trong bộ nhớ

  2. Sự khác biệt giữa Scope_Identity (), Identity (), @@ Identity và Ident_Current () là gì?

  3. Làm cách nào để tách giá trị một cột thành nhiều giá trị cột?

  4. Câu lệnh SQL Server RAISERROR với các ví dụ đơn giản

  5. DevOps:DBA hoặc Developer - Cân bằng chính xác