هل يمكنني إعادة ترتيب الأعمدة بشكل منطقي في الجدول؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

إذا كنت أقوم بإضافة عمود إلى جدول في Microsoft SQL Server، فهل يمكنني التحكم في مكان عرض العمود بشكل منطقي في الاستعلامات؟

لا أريد العبث بالتخطيط الفعلي للأعمدة الموجودة على القرص، ولكني أرغب في تجميع الأعمدة معًا بشكل منطقي عندما يكون ذلك ممكنًا بحيث تسرد أدوات مثل SQL Server Management Studio محتويات الجدول بطريقة مناسبة.

أعلم أنه يمكنني القيام بذلك من خلال SQL Management Studio عن طريق الانتقال إلى وضع "التصميم" الخاص بهم للجداول وسحب ترتيب الأعمدة حولها، ولكنني أود أن أكون قادرًا على القيام بذلك في لغة SQL الأولية حتى أتمكن من إجراء الترتيب مكتوبة من سطر الأوامر.

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

المحلول

لا يمكنك القيام بذلك برمجياً (بطريقة آمنة) دون إنشاء جدول جديد.

ما يفعله Enterprise Manager عند إجراء عملية إعادة ترتيب هو إنشاء جدول جديد ونقل البيانات ثم حذف الجدول القديم وإعادة تسمية الجدول الجديد إلى الاسم الحالي.

إذا كنت تريد أن تكون أعمدتك بترتيب/تجميع معين دون تغيير ترتيبها الفعلي، فيمكنك إنشاء طريقة عرض يمكن أن تكون ما تريده.

نصائح أخرى

أعتقد أن ما يفتقده الجميع هنا، هو أنه على الرغم من أنه ليس على الجميع التعامل مع 10 أو 20 أو 1000 نسخة من نفس نظام البرنامج المثبت في جميع أنحاء البلاد والعالم...أولئك منا الذين يصممون البرامج المباعة تجاريًا يفعلون ذلك.ونتيجة لذلك، نقوم بتوسيع الأنظمة بمرور الوقت، وتوسيع الجداول عن طريق إضافة حقول عند الحاجة إلى إمكانات جديدة، وبما أن هذه الحقول محددة فإنها تنتمي إلى جدول موجود، وعلى هذا النحو، على مدار عقد من التوسع والنمو وإضافة الحقول وما إلى ذلك إلى الجداول....ومن ثم الاضطرار إلى العمل مع هذه الجداول بدءًا من التصميم والدعم وحتى البحث في بعض الأحيان في البيانات الأولية/استكشاف الأخطاء وإصلاحها لتصحيح أخطاء الوظائف الجديدة ....إنه أمر مزعج للغاية ألا يكون لديك المعلومات الأساسية التي تريد رؤيتها ضمن المجموعة الأولى من الحقول، عندما يكون لديك جداول تحتوي على 30-40-50 أو حتى 90 حقلاً ونعم في قاعدة بيانات تم تطبيعها بشكل صارم.

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

ليست فقط مملة وتستغرق وقتا طويلا ولكن ...في خمس سنوات أخرى، يجب أن يحدث مرة أخرى ....

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

يفكر غالبية المطورين من وجهة نظر نظام واحد يخدم شركة واحدة أو سوقًا محددًا للغاية.

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

إذا فهمت سؤالك، فأنت تريد التأثير على الأعمدة التي يتم إرجاعها أولاً، وثانيًا، وثالثًا، وما إلى ذلك موجود الاستفسارات، أليس كذلك؟

إذا تمت كتابة جميع استفساراتك باستخدام SELECT * FROM TABLE - ثم سوف تظهر في الإخراج كما تم وضعها في SQL.

إذا كانت استفساراتك مكتوبة مع SELECT Field1, Field2 FROM TABLE - إذن الترتيب الذي تم وضعه في SQL لا يهم.

عندما يقوم Management Studio بذلك، فإنه يقوم بإنشاء جدول مؤقت، ونسخ كل شيء عبره، وإسقاط الجدول الأصلي وإعادة تسمية الجدول المؤقت.لا يوجد عبارة T-SQL مكافئة بسيطة.

إذا كنت لا ترغب في القيام بذلك، فيمكنك دائمًا إنشاء طريقة عرض للجدول مع الأعمدة بالترتيب الذي تريده واستخدام ذلك؟

يحرر:للضرب!

هناك طريقة واحدة، ولكنها مؤقتة فقط للاستعلام نفسه.على سبيل المثال،

لنفترض أن لديك 5 جداول.يسمى الجدول T_Testing

الاسم الأول واسم العائلة ورقم الهاتف والبريد الإلكتروني ومعرف_العضو

تريده أن يدرج هويته، ثم اسم العائلة، ثم الاسم الأول، ثم الهاتف، ثم البريد الإلكتروني.

يمكنك القيام بذلك حسب التحديد.

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

بخلاف ذلك، إذا كنت تريد فقط أن يظهر اسم العائلة قبل الاسم الأول لسبب ما، فيمكنك القيام بذلك أيضًا على النحو التالي:

Select LastName, *
From T_Testing

الشيء الوحيد الذي تريد التأكد من أنك تفعله هو أنه يجب الإشارة إلى وظيفة OrderBy أو Where على أنها Table.Column إذا كنت ستستخدم Where أو OrderBy

مثال:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

آمل أن يكون هذا مفيدًا، لقد اكتشفت ذلك لأنني كنت بحاجة للقيام بذلك بنفسي.

  1. قم بكتابة الجدول الموجود لديك إلى نافذة استعلام.
  2. قم بتشغيل هذا البرنامج النصي على قاعدة بيانات اختبارية (قم بإزالة عبارة الاستخدام)
  3. استخدم SSMS لإجراء تغييرات العمود التي تحتاجها
  4. انقر فوق إنشاء البرنامج النصي تغيير (ترك معظم وأيقونة Bottommost على شريط الأزرار ، افتراضيًا)
  5. استخدم هذا البرنامج النصي مقابل طاولتك الحقيقية

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

ويمكن القيام بذلك باستخدام SQL، عن طريق تعديل جداول النظام مباشرة.على سبيل المثال، انظر هنا:

تغيير الجدول - أضف عمودًا جديدًا بينهما

ومع ذلك، لا أوصي باللعب بجداول النظام، إلا إذا كان ذلك ضروريًا للغاية.

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

في حالة وجود عدد كبير جدًا من الحالات لإجراء عملية يدوية، يجب عليك تجربة هذا البرنامج النصي:https://github.com/Epaminaidos/reorder-columns

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