سؤال

لقد قمت ببناء استعلام معقد لقاعدة بيانات الوصول الخاصة بي وفي الوصول ، يعمل مثل السحر. ولكن عندما أحاول تشغيل الاستعلام نفسه في برنامجي عبر OLEDB ، أحصل على استثناء "خطأ بناء الجملة في عملية الانضمام". لا معلومات أخرى.

SELECT
    MainTable.Main_dbID,
    D0.Kvp_Value AS ["Value"]
FROM (MainTable
INNER JOIN (
    SELECT Main_dbID, Kvp_Value
    FROM KVPTable
    WHERE Kvp_Code IN (1, 2, 4)
) AS D0
ON D0.Main_dbID = MainTable.Main_dbID)
WHERE Main_Time <= ? AND Main_Time >= ?;

لقد كسرت الاستعلام لأسفل بقدر ما شعرت أنه لا يزال ممثلاً. السبب في أنني أستخدم مجموعة فرعية بدلاً من الانضمام المباشر هو أنني بحاجة إلى الانضمام إلى جدول القيمة الرئيسي عدة مرات لوضع مفاتيح مختلفة في أعمدة مختلفة. لم أستطع الحصول على ذلك للعمل بأي طريقة أخرى.

أنا أعمل مع C# 2.0 و Visual Studio 2008 في حال كان ذلك مناسبًا.

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

المحلول

وجدت المشكلة. الطريقة التي أدخلت بها الاستعلام كسرها ...

تحرير: كما ترون ، قمت بتوزيع الاستعلام على خطوط متعددة بحيث يكون القراءة أسهل قليلاً. عندما لصقها في رمز المصدر الخاص بي ، حدث هذا:

"SELECT FooField" +
"FROM BarTable;";

مما يؤدي إلى "اختيار foofieldfrom bartable ؛" - من الواضح أنه ليس بناء جملة صالح. أنا فقط لم أدرك ذلك أولاً ...

نصائح أخرى

إنها بالتأكيد رسالة مربكة. ما هو الخطأ هو الفاصلة الإضافية:

D0.Value AS ["Value"],  <-- here

آمل أن تكون هذه الأسماء ليست أسماء حقيقية (عمود) ، لأن القيمة والوقت محجوزان وسوف تسبب مشاكل لا نهاية لها. أقترح أنه على الأقل ترفقها بين قوسين مربع ، إذا كانت أسماء حقيقية.

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