لماذا تؤدي مجموعة SET اللاحقة إلى ظهور خطأ بشكل غير متسق في SQL؟

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

  •  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، وما إلى ذلك) الذي تسبب في عدم الوصول إلى الخط أبدًا ...ولكنني أجد أنه لا يمكنني إنشاء إجراء مخزن يحتوي على هذا كبيان مستقل.

إذا قمت بكتابة الإجراء وحاولت إعادة إنشائه (باسم مختلف)، فهل يمكن إنشاؤه؟

قد يكون من المفيد نشر هذا النص، أو نشر القدر الذي يناسبك من نشره للعامة.

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