سؤال

أحاول إرسال بريد قاعدة البيانات عند حدوث خطأ داخل المعاملة. الإعداد الخاص بـ dbo.sp_send_dbmail صحيح ، عندما أقوم بتنفيذ Proc I ، أحصل على بريد إلكتروني خلال 1 دقيقة.

ومع ذلك ، عندما أحاول استخدام dbo.sp_send_dbmail داخل بروك آخر ضمن المعاملات أكثر من لا أحصل على البريد الإلكتروني. يظهر SQL Server في نافذة النتيجة أن "قائمة الانتظار عبر البريد" لكنني لم أستلمها أبدًا.

ابدأ الصفقة

DECLARERERN Int DECLARE TEST NVARCHAR (MAX)

RAISERROR ("هذا اختبار" ، 16 ، 1) حدد @err = خطأ

إذا ابدأ err <> 0

settest = error_message ()

exec msdb.dbo.sp_send_dbmail
@المستفيدين = 'mail@mail.net' ،
@body = "اختبار الداخل" ،
subject = 'خطأ مع proc' ،
body_format = 'html' ،
append_query_error = 1 ،
profile_name = 'database mail profile' ؛

نهاية معاملة التراجع نهاية

ارتكاب معاملة

وأنا أحصل على نتيجة

MSG 50000 ، المستوى 16 ، الحالة 1 ، السطر 7
هذا اختبار
قائمة الانتظار عبر البريد.

هل كانت مفيدة؟

المحلول

لقد قمت بتراجعه حتى لم يخرج أبدًا ، ضع رمز البريد الإلكتروني خارج المعاملة

من الكتب على الإنترنت

عند تنفيذ SP_SEND_DBMAIL من داخل معاملة موجودة ، يعتمد بريد قاعدة البيانات على المستخدم إما لالتزام أي تغييرات أو تراجعها. لا تبدأ معاملة داخلية.

http://msdn.microsoft.com/en-us/library/ms190307.aspx

نصائح أخرى

تحتاج إلى إنشاء نقطة حفظ ، ومحاولة عمليتك ، في حالة تراجع الخطأ إلى SavePoint ، إرسال رسالة البريد ثم الالتزام. على غرار النمط الموضح في معالجة الاستثناءات والمعاملات المتداخلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top