كيفية منع استعلام الإدراج من التسجيل في معاملة موزعة؟
-
09-06-2019 - |
سؤال
لدي استعلام 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)