Tôi đang cố gắng phát triển trình kích hoạt thư. Ai đó có thể hỗ trợ về cách thức này có thể đạt được để khi sử dụng chèn một bản ghi nó kiểm tra trường "tốc độ" sao cho khi giá trị được chèn vượt quá 100, một thư được gửi đến địa chỉ được chỉ định.Gửi e-mail từ trình kích hoạt
Trả lời
Trước tiên, bạn cần phải thiết lập cơ sở dữ liệu email - nếu bạn đã không làm như vậy, câu hỏi này có thể giúp:
Sau đó, bạn cần kích hoạt:
CREATE TRIGGER dbo.whatever
ON dbo.wherever
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 1 FROM inserted WHERE speed > 100)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@recipients = '[email protected]',
@profile_name = 'default',
@subject = 'Someone was speeding',
@body = 'Yep, they sure were.';
END
END
GO
Bây giờ, có thể bạn sẽ nói rằng bạn muốn dữ liệu từ chèn được thực sự được bao gồm trong e-mail. Và độ nghiêng đầu tiên của bạn là khai báo một số biến cục bộ và gán chúng từ inserted
- điều này không có tác dụng vì trình kích hoạt của bạn có thể phản hồi với chèn nhiều hàng. Vì vậy, đúng cách để làm điều này là:
CREATE TRIGGER dbo.whatever
ON dbo.wherever
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @body NVARCHAR(MAX) = N'';
SELECT @body += CHAR(13) + CHAR(10) + RTRIM(some_col) FROM inserted;
IF EXISTS (SELECT 1 FROM inserted WHERE speed > 100)
BEGIN
EXEC msdb.dbo.sp_send_dbmail
@recipients = '[email protected]',
@profile_name = 'default',
@subject = 'At least one person was speeding',
@body = @body;
END
END
GO
Điều đó tất cả đã nói, tôi không phải là người hâm mộ lớn gửi e-mail từ trình kích hoạt. Mặc dù thư cơ sở dữ liệu sử dụng dịch vụ môi giới và vì vậy là không đồng bộ, tôi sẽ có khuynh hướng điền vào một bảng xếp hàng và có một chuỗi nền đi xung quanh và gửi tất cả các e-mail thích hợp. Các hai ba điều tốt đẹp về vấn đề này là:
- bạn giảm thiểu sự chậm trễ tiềm năng trong phạm giao dịch bên ngoài mà bắn cò - những phức tạp hơn logic của bạn trong cò, càng chậm bạn thực hiện quá trình đó.
- vì có lẽ không cần thiết phải gửi e-mail đến hàng nghìn giây, bạn có thể dễ dàng biến động thời gian của quá trình nền - điều này tránh phải kiểm tra bảng rất nhỏ, cả ngày, khi rất ít nhiều lần nó sẽ phải thực sự làm bất cứ điều gì.
- Như @goodeye đã chỉ ra, việc giữ riêng quy trình này có thể ngăn lỗi trong phần email của quá trình can thiệp vào DML gốc (trong trường hợp của chúng, tham số không hợp lệ là
sp_send_dbmail
- mà tôi đã vô tình đề xuất)).
Cảm ơn phản hồi. Làm cách nào để thiết lập thư cơ sở dữ liệu. –
+1 cho 'Vâng, họ chắc chắn là.' – JNK
Cảm ơn. Giải pháp của bạn hoạt động tốt –
- 1. Gửi email kích hoạt tới người dùng
- 2. Trình kích hoạt trình kích hoạt trong Jenkins theo EMAIL
- 3. Gửi email với mẫu sử dụng kích hoạt
- 4. gửi email kích hoạt với đăng ký django
- 5. Gửi email kích hoạt khi người dùng mới đăng ký
- 6. Trình kích hoạt máy chủ SQL có thể gửi cho tôi một email không?
- 7. Gửi email từ Elmah?
- 8. gửi email từ localhost
- 9. Gửi email từ chương trình Ruby với TLS
- 10. Lập trình gửi email từ một chức năng elisp
- 11. gửi email từ chương trình C/C++ trong linux
- 12. Gửi biểu mẫu từ Email
- 13. Gửi email tự động theo lập trình
- 14. Trình tự kích hoạt sự kiện cho nút gửi
- 15. Gửi email-Trình mô phỏng Iphone
- 16. Gửi chương trình phát sóng qua email
- 17. Tại sao kích hoạt email lại hữu ích?
- 18. Không thể gửi email bằng MFMailComposeViewController trong trình mô phỏng
- 19. Gửi email từ dòng lệnh trong symfony2
- 20. Cách gửi email đã ký từ java?
- 21. Gửi Email trong nền từ iOS
- 22. PHP Gửi email BCC
- 23. Gửi email bằng OAuth
- 24. ASP.NET Gửi Email
- 25. Cách Gửi Email Mã hóa theo Lập trình (từ một quy trình tự động)
- 26. vb.net gửi email
- 27. Trình kích hoạt WPF
- 28. Làm cách nào để gửi email từ dòng lệnh?
- 29. Gửi email bằng C
- 30. cách gửi mẫu email wth email C#
Bạn cũng cần phải GRANT EXECUTE cho người dùng cho msdb.dbo.sp_send_dbmail nếu nó đang chạy trong ứng dụng chẳng hạn. – smoore4