किसी तालिका में कॉलम ऑर्डर की पहचान कैसे करें


9

मुझे तालिका की तालिका से तालिका परिभाषा क्रम में कॉलम सूचीबद्ध करने की आवश्यकता है:

select * from syscolumns
where id = object_id('MyTable')
--order by colid

syscolumnsतालिकाओं की जांच करके दो कॉलम प्रासंगिक लगते हैं: colidऔर colorderSyscolumns पर MSDN आलेख कहता है:

colid    | smallint | Column or parameter ID.
colorder | smallint | Identified for informational purposes only. 
                    | Not supported. Future compatibility is not guaranteed.

मैंने दौड़ने की कोशिश की

select * from syscolumns where colorder <> colid

जिसमें कोई पंक्तियाँ नहीं निकलीं, और इससे मुझे लगता है कि इन स्तंभों में ज्यादातर समय समान मूल्य होते हैं।

यह दिखता है कि सबसे सुरक्षित शर्त कोलाइड का उपयोग करना है। हालाँकि मुझे यह जानने की उत्सुकता होगी: क्या इन दोनों स्तंभों में अंतर है, और यदि है, तो यह अंतर क्या है?

साथ ही MSDN आलेख, पुष्टि नहीं करता है कि कॉलिड तालिका परिभाषा के क्रम को दर्शाता है। हालांकि यह मानना ​​उचित है कि यह मामला है, क्या आप मुझे बता सकते हैं, यदि आप सुनिश्चित हैं कि यह मामला है, तो आप कैसे जानते हैं कि यह है?

जवाबों:


11

आपको sys.columnsकैटलॉग दृश्य का उपयोग करना चाहिए । syscolumnsकेवल पश्चगामी संगतता के लिए शामिल किया गया है। यह वास्तव में SQL Server 2000 सिस्टम तालिका है जिसका उपयोग SQL Server 2008 R2 में नहीं किया जाना चाहिए।

select *
from sys.columns
where object_id = object_id('MyTable')
order by column_id

वह आपके कॉलम का क्रम वापस कर देना चाहिए। ध्यान दें, हालांकि, ये कॉलम आईडी अनुक्रमिक नहीं हो सकती है।


7

मैं INFORMATION_SCHEMA विचार भी प्रस्तुत करना चाहूंगा। ये एएनएसआई मानक हैं और डेटाबेस का काम करते हैं, जो डेटाबेस का समर्थन करते हैं।

SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MyTable'
ORDER BY ORDINAL_POSITION

3

यदि आप चाहते हैं / कॉलम को अनुक्रम में चाहिए, तो मैंने उपयोग किया है:

select 
    ROW_NUMBER() OVER (PARTITION BY OBJECT_NAME(object_id) ORDER BY Column_ID) as ColumnIDSeq,
    *
from sys.columns
where OBJECT_NAME(object_id) = 'MyTable'
order by column_id
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.