sql - شرح - سكل إدراج كافة أسماء الأعمدة أبجديا




ترتيب تصاعدي sql (4)

وأنا أعلم ذلك

SELECT * FROM Table

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

لنفترض أن لدي ثلاثة أعمدة "نيم" و "إيدج" و "سيكس".

أريد أن يتم تنظيم الأعمدة بالتنسيق

|age| |name| |sex|

هل من الممكن القيام بذلك مع سكل؟


نعم و لا :-)

سكل نفسها لا يهمني ما أمر الأعمدة تأتي في ولكن، إذا كنت لاستخدام:

select age, name, sex from ...

كنت قد وجدت أنها ربما خرجت في هذا النظام (على الرغم من أنني لست متأكدا من معايير سكل ولاية هذا).

الآن قد لا تريد أن تفعل ذلك ولكن في بعض الأحيان الحياة ليست عادلة :-)

لديك أيضا إمكانية أخرى لاستخدام جداول تعريف بيانات دبمس لبناء استعلام حيوي. هذا غير المحمولة ولكن معظم إمدادات دبمس 'هذه الجدول (مثل SYSIBM.SYSCOLUMNS دب / 2 و) ويمكنك تحديد أسماء الأعمدة من هناك في الأزياء المطلوبة. شيء مثل:

select column_name from sysibm.syscolumns
where owner = 'pax' and table_name = 'movies'
order by column_name;

ثم استخدام نتائج هذا الاستعلام لبناء الاستعلام الحقيقي:

query1 = "select column_name from sysibm.syscolumns" +
         " where owner = 'pax' and table_name = 'movies'" +
         " order by column_name"
rs = exec(query1)
query2 = "select"
sep = " "
foreach colm in rs:
    query2 += sep + colm["column_name"]
    sep = ", "
query2 += " from movies order by rating"
rs = exec(query2)
// Now you have the rs recordset with sorted columns.

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


يحدد سكل-92 ستاندارد أنه عند استخدام SELECT * يتم الإشارة إلى الأعمدة في التسلسل الصعودي لموقفها الترتيبي داخل الجدول. الأقسام ذات الصلة هي 4.8 (الأعمدة) و 7.9 (مواصفات الاستعلام). أنا لا أعرف من أي ملحقات بائع للمعيار من شأنها أن تسمح الأعمدة ليتم إرجاعها في أي أمر آخر، ربما لأن استخدام SELECT * عموما تثبيط.

يمكنك استخدام دل سكل للتأكد من أن المواضع الترتيبية للأعمدة تتطابق مع الترتيب الأبجدي المطلوب. ومع ذلك، سيعمل هذا فقط بالطريقة التي تريدها عند الرجوع إلى جدول سينلج في جملة FROM . إذا تمت الإشارة إلى جدولين، سيؤدي SELECT * إلى إرجاع الأعمدة من الجدول الأول بترتيب الموضع الترتيبي متبوعا بأعمدة الجدول الثاني في الموضع الترتيبي، لذا قد لا تكون أعمدة ريسولتسيت الكاملة مرتبة أبجديا.


  • لا توجد طريقة للقيام بذلك تلقائيا دون سكل الحيوي.
  • SELECT * غير مستحسن ولن يتم فرز أسماء الأعمدة
  • عليك أن تفعل صراحة SELECT age, name, sex FROM

على مستوى سكل، لا يهم. لا يهم أي كود عميل كائن-

إذا كان من المهم، ثم فرز عند تقديم البيانات إلى العميل.

عذرا، هذه هي الطريقة الوحيدة ...


يؤدي هذا إلى إنشاء استعلام مع جميع الأعمدة مرتبة أبجديا في العبارة المحددة.

DECLARE @QUERY VARCHAR(2000)
DECLARE @TABLENAME VARCHAR(50) = '<YOU_TABLE>'

SET @QUERY = 'SELECT '
SELECT @QUERY = @QUERY + Column_name + ', 
'
  FROM INFORMATION_SCHEMA.COLUMNS 
 WHERE TABLE_NAME = @TABLENAME
 ORDER BY Column_name

SET @QUERY =  LEFT(@QUERY, LEN(@QUERY) - 4) + ' 
FROM '+ @TABLENAME

PRINT @QUERY
EXEC(@QUERY)




alphabetical