كيفية منع استعلام الإدراج من التسجيل في معاملة موزعة؟

StackOverflow https://stackoverflow.com/questions/76403

سؤال

لدي استعلام SQL Insert داخل عملية مخزنة، لإدراج صفوف في ملف خادم مرتبط طاولة.

نظرًا لأنه يتم استدعاء proc المخزن ضمن معاملة أصلية، فإن عبارة Insert هذه تحاول استخدام DTC لإدراج صفوف في الخادم المرتبط.

وأود أن يتجنب DTC من التورط.

هل هناك أي طريقة يمكنني من خلالها القيام بذلك (مثل التلميح) لعبارة Insert SQL لتجاهل نطاق المعاملات؟

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

المحلول

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

في المقابل، إذا كنت تستخدم مساحة اسم System.Transaction الخاصة بـ .NET 2.0، فيمكنك إخبار عبارات محددة بعدم المشاركة في أي معاملة نطاق أصل.قد يتطلب هذا منك كتابة بعض المنطق الخاص بك في التعليمات البرمجية بدلاً من الإجراءات المخزنة، ولكنه سينجح.

وهنا أ الرابط ذو الصلة.

حظا سعيدا ، آلان.

نصائح أخرى

حاول استخدام OpenQuery للاتصال باستعلام الخادم المرتبط/SP بدلاً من الاتصال المباشر الذي عمل بالنسبة لي

لذا بدلاً من الإدراج في ...حدد * من mylinkedserver.pubs.dbo.authors

على سبيل المثالDECLARE TTSQL VARCHAR (8000) ، VAR char (2) حدد VAR = 'CA' SELECT TTSQL = 'SELECT * from OpenQuery (myLinkedServer ،' '' SELECT * from pubs.dbo.authors where state = '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' + var +' '' '' ')' '

ادخل في .....إكسيك (@TSQL)

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