2013-03-20 19 views
7

Tôi có một thủ tục được lưu trữ chạy mỗi đêm được cho là gửi kết quả truy vấn đến nhiều người nhận. Tuy nhiên vào hầu hết các ngày nó kết thúc bằng cách gửi một email trùng lặp một phút sau đó. Mã tôi đang sử dụng như sau (tất cả email và thông tin cơ sở dữ liệu đã được thay đổi):Thủ tục được lưu trữ sử dụng SP_SEND_DBMAIL gửi email trùng lặp tới tất cả người nhận

EXEC msdb.dbo.sp_send_dbmail 
@recipients = '[email protected]', 
@copy_recipients = '[email protected];[email protected];[email protected]', 
@subject = 'Example Email', 
@profile_name = 'ExampleProfile', 
@query = 'SELECT name 
    FROM table 
    WHERE date BETWEEN (getdate() - 1) AND getdate()', 
@attach_query_result_as_file = 1 

Bất kỳ trợ giúp nào được đánh giá cao.

+0

Cuộc gọi có vẻ tốt nhưng bạn gọi nó như thế nào? Bạn có chắc bạn không gọi nó hai lần? –

+0

Tôi đang gọi nó qua Trình quản lý công việc trong SQL Server Agent và theo như tôi thấy, nó chỉ được gọi một lần trong Trình lập lịch biểu công việc. – andewM

+0

Bạn đã kiểm tra nhật ký chưa? –

Trả lời

5

Giải pháp đã tắt để giảm số tài khoản thử lại tài khoản trên máy chủ thành 0 (trong thuật sĩ cấu hình thư cơ sở dữ liệu).

0

Nếu gửi email trùng lặp tới người nhận thì điều đó có nghĩa là SP của bạn đang được gọi nhiều lần trong một ngày. Kiểm tra thời gian gọi được đặt trong công việc SQL của bạn đang gọi SP này. Nó nên được một lần trong một ngày để tránh các email trùng lặp.

+0

Cảm ơn câu trả lời, nhưng tôi đã kiểm tra danh sách công việc và tôi chắc chắn rằng quy trình chỉ được chạy một lần. – andewM

0

Nếu nó không được gửi hai lần từ SQL Server và cũng không phải là vấn đề của máy chủ thư, hãy đảm bảo bạn không kiểm tra thư trong Outlook có bộ lọc cho thư, sau đó bạn có thể nhận được email hai lần.

+0

Cảm ơn bạn đã nhập, nhưng tôi đã kiểm tra và tôi không sử dụng bất kỳ bộ lọc Outlook Mail nào. – andewM

0

Tôi khuyên bạn nên thêm một bảng khác vào cơ sở dữ liệu của bạn sẽ giữ thông tin vào lần cuối cùng khi email được gửi đến từng người nhận.

Nếu không có bảng đó, bạn thực sự không thể biết điều gì đang diễn ra. Điều gì xảy ra nếu bạn chạy SP nhiều lần do tai nạn? Không có gì ngăn nó gửi một email.

Về vấn đề này - máy chủ thư của bạn có giữ một bản sao trong các mục đã gửi không? Nếu có, bạn có thể muốn kiểm tra ngày gửi cho tất cả thư ở đó. Điều này có thể cung cấp cho bạn thông tin tốt về những gì đang diễn ra.

+0

Cảm ơn bạn đã nhập. Tôi vô hiệu hóa công việc để xem liệu các thủ tục đã được chạy ở nơi khác, tuy nhiên tôi thấy rằng đây không phải là trường hợp và kết thúc tái tạo công việc để xem nếu nó cố định vấn đề. Dường như đã làm được điều đó. – andewM

+0

Tôi rất vui khi biết tôi đã giúp :) –

0

Điều này xảy ra do địa chỉ nhận email (trong nhóm hoặc cá nhân) có địa chỉ email không còn hợp lệ. Trong khi bạn có thể loại bỏ thử lại như trong câu trả lời được chấp nhận, cách tiếp cận tốt nhất là làm sạch phân phối.

0

Tôi gặp sự cố tương tự khi chúng tôi có nhiều người nhận trong một email và sẽ tạo 2 email đã gửi. Vấn đề đã kết thúc là một trong những người nhận không còn giá trị, và thử lại sẽ gửi email cho tất cả người nhận, không chỉ là người nhận không thành công. Có một số lượt xem trong msdb có thể giúp bạn tìm người nhận không hợp lệ của mình. Họ bắt đầu dbo.sysmail_ < một cái gì đó >

Có một vài giải pháp cho vấn đề này.

  1. Tách từng người nhận dưới dạng email riêng biệt.
  2. Tháo nhận không hợp lệ từ danh sách
  3. Đặt thiết lập trong DBMail retry của bạn để 0
0

Tôi có vấn đề trùng lặp cùng này khi sử dụng một câu lệnh SELECT trong @query để gửi văn bản liên tục trong cơ thể của mỗi email, ngoài việc sử dụng @body và @subject để gửi văn bản tùy chỉnh tùy thuộc vào một số điều kiện.

Một email chứa cả văn bản tùy chỉnh và văn bản truy vấn như mong đợi. Email trùng lặp chỉ chứa văn bản @query (không có văn bản tùy chỉnh) với dòng chủ đề được chèn vào hệ thống của "SQL Server Message".

Tôi đã chạy SELECT * FROM msdb.dbo.sysmail_sentitems và đảm bảo đủ email đã được gửi hai lần.Một cái nhìn tại sysmail_configuration tiết lộ rằng AccountRetryAttempts paramValue = 1.

Sự cố đã biến mất sau khi tôi xóa @query hoàn toàn từ thủ tục được lưu trữ (thực hiện thay đổi), chạy sp. Sau đó, tôi đặt @query trở lại trong sp, exec thay đổi. Sau đó, các email chỉ bắt đầu gửi một lần. Đi con số.

0

Đảm bảo bạn không có bất kỳ báo cáo Cập nhật nào khác trong bất kỳ trình kích hoạt nào khác trong trình kích hoạt phụ khi cập nhật.

Ngay cả khi tôi đối mặt với vấn đề tương tự, khi tôi vượt qua kiểm tra với trình kích hoạt của tôi, tôi đã thấy rằng tôi đã sử dụng một câu lệnh Cập nhật khác trong trình kích hoạt khác của tôi. Nó đã gây ra nhiều lần kích hoạt cho trình kích hoạt. Do đó hai thư đã được kích hoạt.

Các vấn đề liên quan