لماذا تؤدي مجموعة SET اللاحقة إلى ظهور خطأ بشكل غير متسق في SQL؟
-
13-09-2019 - |
سؤال
أشاهد خطأً من أحد تطبيقات الويب لدينا، وكان يستدعي إجراءً مخزنًا كان مسؤولاً عن تحديث سجل في قاعدة البيانات.
لقد عمل هذا الإجراء المخزن لأسابيع دون أي مشاكل.ثم في أحد الأيام بدأ في إلقاء الأخطاء، وأثناء تصحيح الأخطاء وجدنا أن السبب موجود داخل الإجراء المخزن.
كان لديه في الأساس بيان مثل هذا
Begin
// Do Stuff
Set
End
لذلك SET
لم تقم بتعيين أي شيء في الواقع.لسبب ما، يعمل هذا الأمر بشكل جيد على الخادم الخاص بنا، وكان يعمل بشكل جيد على خادم العميل حتى وقت سابق من اليوم عندما قرر بدء الشكوى.(خطأ في بناء الجملة غير صحيح)
هل هناك أي نوع من إعدادات SQL Server قد يتسبب في هذا التغيير المفاجئ في السلوك؟
إيضاح - ال SET
لقد كان دائما في الإجراءات.وتشغيل أ SET
في حد ذاته، أو كعبارة وحيدة في إجراء مخزن لا يعمل في الواقع بالنسبة لي.هذه هي المشكلة، ذلك لا ينبغي عمل.فهل هناك أي شيء من شأنه أن يجعلها تعمل عندما يجب أن تفشل؟
المحلول
إجراء مع أ SET
مثل هذا عادةً ما يفشل في التجميع، حتى لو كان SET
لا يمكن الوصول إلى:
alter procedure dbo.testproc as
begin
return 1;
set
end
Incorrect syntax near the keyword 'SET'.
نظرًا لفشل التغيير، لا أستطيع أن أرى كيف يمكن أن ينتهي الإجراء في قاعدة البيانات الخاصة بك في المقام الأول؟
أو ربما كنت تعمل في وضع التوافق لـ SQL Server 2000 (والذي لا يزال يسمح بذلك.) سيؤدي تغيير mdoe التوافق إلى SQL Server 2005 أو أعلى إلى كسر الإجراء.
نصائح أخرى
سيؤدي تنفيذ "SET" في حد ذاته إلى حدوث خطأ.كنت سأقترح في الأصل أنه قد يكون لديك رمز فرعي (IFs، RETURNs، GOTOs، وما إلى ذلك) الذي تسبب في عدم الوصول إلى الخط أبدًا ...ولكنني أجد أنه لا يمكنني إنشاء إجراء مخزن يحتوي على هذا كبيان مستقل.
إذا قمت بكتابة الإجراء وحاولت إعادة إنشائه (باسم مختلف)، فهل يمكن إنشاؤه؟
قد يكون من المفيد نشر هذا النص، أو نشر القدر الذي يناسبك من نشره للعامة.