سؤال

لقد كنت تغلب على رأسي ضد هذا، وأنا متأكد من أنني أفتقد شيئا واضحا، لكن ...

لدي جدول في قاعدة بيانات العميل، وهذا في الأساس:

Item_Set_Key int
Item_1       bit
Notes_1      nvarchar(80)
Item_2       bit
Notes_2      nvarchar(80)
Item_3       bit
Notes_3      nvarchar(80)
...

هناك 99 عنصر في كل سجل، ولا يوجد تغيير المخطط ليس خيارا (اعتبارات خارجية أخرى مشتركة).

ومع ذلك، من أجل عرضه في أي شيء يشبه الاستخبارات عن بعد للمستخدم، علينا عدم فكه (عبر عرض) مثل هذا:

SELECT i.Item_Set_Key, i.Item_Number, i.Selected, i.Item, i2.Notes, i2.Note
FROM (
SELECT Item_Set_Key, SUBSTRING (Item, 6, 2) AS Item_Number, Selected, Item
    FROM Item_Set
    UNPIVOT (Selected FOR Item IN
        (Item_1, Item_2, Item_3, Item_4, Item_5, ...)
    ) as u
) AS i
LEFT JOIN (
SELECT Item_Set_Key, SUBSTRING (Note, 7, 2) AS Item_Number, Notes
    FROM Item_Set
    UNPIVOT (Notes FOR Note IN
        (Notes_1, Notes_2, Notes_3, Notes_4, Notes_5, ...)
    ) as n
) AS i2 ON i2.Item_Set_Key = i.Item_Set_Key
    AND i2.Item_Number = i.Item_Number

أنا أقوم بالترتيب القياسي من ذلك إلى الشبكة. ومع ذلك، أنا في شيء من الخسارة حول كيفية إنشاء UpdateCommand لذلك، لأن النص سيضطر إلى تسمية العمود بشكل صريح في المجموعة، ولكن أسماء الأعمدة ديناميكية في العنصر وأعمدة الملاحظات، ويمكنني فقط قم بتعيين جميع الأعمدة لأن كل سجل سيكون لديه بيانات فقط لزوج عنصر / ملاحظة واحد.

الأفكار؟

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

المحلول

لن تتمكن من الاعتماد على ملزمة البيانات لإرسال التغييرات مرة أخرى إلى قاعدة البيانات في الجدول المحوري الأصلي. بدلا من ذلك، تحتاج إلى التقاط كل تحديث كوحدة واحدة "وحدة عمل". على سبيل المثال، معرف العنصر = 92، والقيمة = "TOM". ربما كانت قيمة العنصر 92 سابقا "جو". وحدة عملك هنا هي تغيير القيمة للبند 92.

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

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

الخيار الأخير هو ببساطة الحفاظ على طاولتين فعلي ثم اكتب عملية دمج معقدة لمزامنةها بشكل دوري.

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