خادم قاعدة البيانات:مشكلة في معاملة اللقطة مع المرادفات في Express Edition

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

سؤال

لدينا قاعدتي بيانات، مثلاً DB1 وDB2.
يحتوي DB1 على كافة الإجراءات المخزنة التي تصل أيضًا إلى البيانات الموجودة في DB2.
يستخدم DB1 المرادفات للوصول إلى الجداول في DB2.
(استخدام المرادفات هو مطلب في حالتنا)

يعمل هذا بشكل جيد تمامًا في كافة المواقف مع SQL Server 2005 Developer Edition.

لكن في الإصدار Express، نحصل على استثناء عندما نقوم بما يلي:
1 أعد تشغيل خادم SQL
2 قم بتنفيذ الكود التالي داخل DB1:

تعيين لقطة مستوى عزل المعاملة
تبدأ الصفقة
أعلن @sQuery varchar (الحد الأقصى)
set @sQuery = 'اختر * من SynToSomeTableInDB2'
تنفيذي (@sQuery)
ارتكاب الصفقة

سيؤدي هذا إلى الخطأ التالي:

فشلت معاملة عزل اللقطة في قاعدة البيانات '...' لأنه لم يتم استرداد قاعدة البيانات عند بدء المعاملة الحالية.أعد محاولة المعاملة بعد استرداد قاعدة البيانات.

يتم تنفيذ نفس استعلام التحديد بشكل جيد عند استخدامه بدون EXEC أو عند تشغيله على إصدار المطور.
تعد إعادة تشغيل الخادم في الخطوة 1 أمرًا مهمًا، لأنه بمجرد إجراء الاتصال بـ DB2، تعمل التعليمات البرمجية أيضًا بشكل جيد على SQL Server Express Edition.

هل لدى أي شخص فكرة ما هذا؟يجب أن نكون قادرين على استخدام EXEC لبعض الاستعلامات الديناميكية.لقد قمنا بالفعل بالتحقق من MSDN، وبحثنا في Google، ...أي مساعدة يحظى بتقدير كبير.

--- يحرر:10 مارس 09
كما تمت مناقشته مع Ed Harper أدناه، فقد قمت بتقديم تقرير خطأ لهذا الغرض.
يرى https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=422150

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

المحلول

كما تبين عبر مايكروسوفت كونيكت, ، المشكلة هي أنه بشكل افتراضي في SQL Server Express Edition، يكون على مقربة السيارات تم ضبط الخيار على حقيقي.
تغيير هذا الخيار إلى خطأ شنيع يحل المشكلة.

نصائح أخرى

وتشير رسالة الخطأ التي يفشل الاستعلام لأن الخادم SQL لا تزال تتعافى قاعدة البيانات بعد إعادة تشغيل الخدمة عند تنفيذ طلبك.

هل الخطأ يحدث دائما في المحاولة الأولى لتشغيل هذا الرمز، بغض النظر عن الوقت الذي انقضى منذ تم إعادة تشغيل الخدمة؟

ويمكن التأكد من سجل SQL Server الذي قاعدة البيانات يتعافى بشكل صحيح بعد إعادة التشغيل؟

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