فهم خطأ “اسم العمود غير صالح” في SQL

عند العمل مع SQL Server واستعلام البيانات من خادم SSAS المرتبط، قد تواجه خطأ قد يكون محبطًا للغاية: “اسم عمود غير صالح ‘Value’”. وغالبًا ما يظهر هذا المشكلة عند محاولة تصفية النتائج باستخدام اسم مستعار في عبارة WHERE في عبارات SQL الخاصة بك. في هذا المنشور، سنستكشف هذه المشكلة بالتفصيل وسنقدم حلًا بسيطًا لمساعدتك في حلها.

شرح المشكلة

في استعلام SQL الأولي الخاص بك، يبدو أن كل شيء يعمل بشكل صحيح:

SELECT "Ugly OLAP name" as "Value" 
FROM OpenQuery(OLAP, 'OLAP Query')

ومع ذلك، فإن إضافة عبارة WHERE لتصفية القيم الأكبر من صفر مثل:

WHERE "Value" > 0

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

اسم عمود غير صالح ‘Value’

يحدث هذا الخطأ بسبب ترتيب التقييم في SQL Server، الذي يختلف عن الترتيب الذي قد تكتب به الاستعلام. فهم هذا الترتيب أمر بالغ الأهمية لتجنب مثل هذه الأخطاء.

ترتيب معالجة استعلام SQL

يعالج SQL Server الاستعلامات بترتيب معين بغض النظر عن كيفية تنسيقها. إليك كيف يبدو الترتيب:

  1. FROM: تحدد الجداول أو العروض المصدر.
  2. ON: شروط الربط.
  3. JOIN: تجمع الجداول.
  4. WHERE: تصفية الصفوف بناءً على المعايير.
  5. GROUP BY: ترتيب الصفوف في مجموعات.
  6. HAVING: تصفية المجموعات.
  7. SELECT: اختيار الأعمدة لإرجاعها.
  8. ORDER BY: فرز مجموعة النتائج.

وبحسب هذا الترتيب، يقوم محرك SQL بمعالجة عبارة WHERE قبل تقييم سطر SELECT، مما يعني أنه لا يتم التعرف على الاسم المستعار “Value” بعد عند فحص الشرط.

الحل

لتجاوز هذه القيود، يمكنك إنشاء عرض مضمن (المعروفة أيضًا بالجدول المشتق). تتيح لك هذه الطريقة encapsulate الاستعلام الأصلي، مما يسمح بمعالجة الاسم المستعار كاسم عمود صالح في العبارات اللاحقة. إليك كيفية القيام بذلك:

SELECT A.Value
FROM (
    SELECT "Ugly OLAP name" as "Value"
    FROM OpenQuery(OLAP, 'OLAP Query')
) AS A
WHERE A.Value > 0

تحليل الحل

  • إنشاء العرض المضمن: يتم لف جملة SELECT داخل أقواس ومنحها اسمًا مستعارًا (في هذه الحالة، AS A). يتم التعامل مع هذا العرض على أنه “جدول” جديد.
  • الإشارة إلى الاسم المستعار: الآن، نظرًا لأن Value هو عمود صالح في سياق العرض المضمن، يمكنك استخدامه بثقة في عبارة WHERE الخاصة بك.

الخلاصة

يمكن أن يساعدك فهم كيفية معالجة SQL Server للاستعلامات على مستوى أساسي في توفير الكثير من الوقت أثناء تصحيح الأخطاء مثل مشكلة “اسم العمود غير صالح”. من خلال استخدام عرض مضمن، تقوم بإنشاء هيكل منطقي حيث يعرف SQL ما يجب الإشارة إليه خلال مرحلة معالجة عبارة WHERE.

إذا واجهت مشكلات مشابهة أثناء العمل مع استعلامات SQL، تذكر أن تأخذ في اعتبارك ترتيب التقييم واستخدام العروض المضمنة حيثما كان ذلك ضروريًا لهيكل استعلام أنظف وأكثر فعالية.

الآن أنت مستعد لمواجهة استعلامات SQL الخاصة بك بثقة!