سؤال
لقد كنت تغلب على رأسي ضد هذا، وأنا متأكد من أنني أفتقد شيئا واضحا، لكن ...
لدي جدول في قاعدة بيانات العميل، وهذا في الأساس:
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. في الواقع، يمكنك تخزين البيانات بتصميم أفضل ولكن بالنسبة للتطبيق الحالي الذي تثبته مرة أخرى. قد يعمل هذا إلا إذا كنت بحاجة إلى القيام بالتحديثات أثناء وجوده في التصميم المحوري.
الخيار الأخير هو ببساطة الحفاظ على طاولتين فعلي ثم اكتب عملية دمج معقدة لمزامنةها بشكل دوري.